Commit 6a841528d288ac420052f5c98fd426b0fcdc5b52

Authored by Rusty Russell
1 parent 549a8a0306

param: silence .init.text references from param ops

Ideally, we'd check that it was only the "set" function which was __init,
and that the permissions were r/o.  But that's a little hard.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
Tested-by: Phil Carmody <ext-phil.2.carmody@nokia.com>

Showing 1 changed file with 13 additions and 0 deletions Side-by-side Diff

scripts/mod/modpost.c
... ... @@ -1033,6 +1033,13 @@
1033 1033 * fromsec = .data*
1034 1034 * atsym =__param*
1035 1035 *
  1036 + * Pattern 1a:
  1037 + * module_param_call() ops can refer to __init set function if permissions=0
  1038 + * The pattern is identified by:
  1039 + * tosec = .init.text
  1040 + * fromsec = .data*
  1041 + * atsym = __param_ops_*
  1042 + *
1036 1043 * Pattern 2:
1037 1044 * Many drivers utilise a *driver container with references to
1038 1045 * add, remove, probe functions etc.
... ... @@ -1065,6 +1072,12 @@
1065 1072 if (match(tosec, init_data_sections) &&
1066 1073 match(fromsec, data_sections) &&
1067 1074 (strncmp(fromsym, "__param", strlen("__param")) == 0))
  1075 + return 0;
  1076 +
  1077 + /* Check for pattern 1a */
  1078 + if (strcmp(tosec, ".init.text") == 0 &&
  1079 + match(fromsec, data_sections) &&
  1080 + (strncmp(fromsym, "__param_ops_", strlen("__param_ops_")) == 0))
1068 1081 return 0;
1069 1082  
1070 1083 /* Check for pattern 2 */