Messages in this thread | | | Date | Wed, 9 Mar 2022 11:56:18 +0300 | From | Dan Carpenter <> | Subject | Re: [PATCH] clocksource: acpi_pm: fix return value of __setup handler |
| |
On Tue, Mar 08, 2022 at 08:03:01PM -0800, Randy Dunlap wrote: > __setup() handlers should return 1 to obsolete_checksetup() in > init/main.c to indicate that the boot option has been handled. > A return of 0 causes the boot option/value to be listed as an Unknown > kernel parameter and added to init's (limited) environment strings. > > The __setup() handler interface isn't meant to handle negative return > values -- they are non-zero, so they mean "handled" (like a return > value of 1 does), but that's just a quirk. So return 1 from > parse_pmtmr(). Also print a warning message if kstrtouint() returns > an error.
Everyone probably predicted that this API was/is going to cause bugs?
Smatch treats every (struct obs_kernel_param)->setup_func function as the same so it's impossible to write a static checker for this because in do_early_param() it expects zero on success and obsolete_checksetup() has expects 1 on success and also on failure.
init/main.c 732 static int __init do_early_param(char *param, char *val, 733 const char *unused __always_unused, 734 void *arg __always_unused) 735 { 736 const struct obs_kernel_param *p; 737 738 for (p = __setup_start; p < __setup_end; p++) { 739 if ((p->early && parameq(param, p->str)) || 740 (strcmp(param, "console") == 0 && 741 strcmp(p->str, "earlycon") == 0) 742 ) { 743 if (p->setup_func(val) != 0) 744 pr_warn("Malformed early option '%s'\n", param); ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
745 } 746 } 747 /* We accept everything at this stage. */ 748 return 0; 749 }
regards, dan carpenter
| |