On Tue, Oct 12, 2010 at 10:56:05AM +0100, Mark Brown wrote: > On Tue, Oct 12, 2010 at 11:49:27AM +0200, Takashi Iwai wrote: > > Mark Brown wrote: > > > Argh, yes, I'm (again) confused by that behavior. > > The problem is the potential buffer overflow, indeed. snprintf() > > returns the size that would be printed. Thus a safe code would be > > like: > > > > list_for_each_entry(dai, &dai_list, list) { > > int len = snprintf(buf + ret, PAGE_SIZE - ret, "%s\n", dai->name); > > if (len < 0) > > continue; > > ret += len; > > if (ret >= PAGE_SIZE) { > > ret = PAGE_SIZE; > > break; > > } > > } > > Yes, this form is better for that variant of the loop - that is safe and > legible without relying on current implementation details of snprintf(). This is fine with me as well. My original patch had a problem with the WARN_ON() so your version is better. regards, dan carpenter -- To unsubscribe from this list: send the line "unsubscribe kernel-janitors" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html