Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6a841528 authored by Rusty Russell's avatar Rusty Russell
Browse files

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: default avatarRusty Russell <rusty@rustcorp.com.au>
Acked-by: default avatarSam Ravnborg <sam@ravnborg.org>
Tested-by: default avatarPhil Carmody <ext-phil.2.carmody@nokia.com>
parent 549a8a03
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -1033,6 +1033,13 @@ static const struct sectioncheck *section_mismatch(
 *   fromsec = .data*
 *   atsym   =__param*
 *
 * Pattern 1a:
 *   module_param_call() ops can refer to __init set function if permissions=0
 *   The pattern is identified by:
 *   tosec   = .init.text
 *   fromsec = .data*
 *   atsym   = __param_ops_*
 *
 * Pattern 2:
 *   Many drivers utilise a *driver container with references to
 *   add, remove, probe functions etc.
@@ -1067,6 +1074,12 @@ static int secref_whitelist(const struct sectioncheck *mismatch,
	    (strncmp(fromsym, "__param", strlen("__param")) == 0))
		return 0;

	/* Check for pattern 1a */
	if (strcmp(tosec, ".init.text") == 0 &&
	    match(fromsec, data_sections) &&
	    (strncmp(fromsym, "__param_ops_", strlen("__param_ops_")) == 0))
		return 0;

	/* Check for pattern 2 */
	if (match(tosec, init_exit_sections) &&
	    match(fromsec, data_sections) &&