kernel/module.c: use scnprintf() instead of sprintf()
authorChen Gang <gang.chen@asianux.com>
Tue, 20 Aug 2013 06:04:21 +0000 (15:34 +0930)
committerRusty Russell <rusty@rustcorp.com.au>
Tue, 20 Aug 2013 06:07:46 +0000 (15:37 +0930)
For some strings, they are permitted to be larger than PAGE_SIZE, so
need use scnprintf() instead of sprintf(), or it will cause issue.

One case is:

  if a module version is crazy defined (length more than PAGE_SIZE),
  'modinfo' command is still OK (print full contents),
  but for "cat /sys/modules/'modname'/version", will cause issue in kernel.

Signed-off-by: Chen Gang <gang.chen@asianux.com>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
kernel/module.c

index 4eb26b6d65478cca6db7367fb76952225b3286ff..40ee1dc3c3bfb028df31e106e50a29858607df29 100644 (file)
@@ -604,7 +604,7 @@ static void setup_modinfo_##field(struct module *mod, const char *s)  \
 static ssize_t show_modinfo_##field(struct module_attribute *mattr,   \
                        struct module_kobject *mk, char *buffer)      \
 {                                                                     \
-       return sprintf(buffer, "%s\n", mk->mod->field);               \
+       return scnprintf(buffer, PAGE_SIZE, "%s\n", mk->mod->field);  \
 }                                                                     \
 static int modinfo_##field##_exists(struct module *mod)               \
 {                                                                     \