fixed resource leak in scripts/mod/modpost.c
PATCH v2 1/1 fixed resource leak in scripts/mod/modpost.c
Patch modified for released 2.6.35 kernel. sec2annotation returns malloc'ed buffer directly to printf as an argument. Patch lets free this buffer after printing.
From: Alexey Fomenko <[email protected]>
Date: Thu, 05 Aug 2010 17:59:04 +0300
Subject: [PATCHv2] fixed resource leak in scripts/mod/modpost.c
--- scripts/mod/modpost.c | 55 ++++++++++++++++++++++++++++++++++++------------ 1 files changed, 40 insertions(+), 14 deletions(-)
scripts/mod/modpost.c +40 -14
@@ -1195,6 +1195,8 @@ {const char *from, *from_p;const char *to, *to_p; +char *prl_from; +char *prl_to;switch (from_is_func) {case 0 : from ="variable" ; from_p ="" ;break ;
@@ -1218,16 +1221,21 @@switch (mismatch->mismatch) {case TEXT_TO_ANY_INIT : + prl_from =sec2annotation (fromsec); + prl_to =sec2annotation (tosec);fprintf (stderr,"The function %s%s() references\n" "the %s %s%s%s.\n" "This is often because %s lacks a %s\n" "annotation or the annotation of %s is wrong.\n" , -sec2annotation (fromsec), fromsym, - to,sec2annotation (tosec), tosym, to_p, - fromsym,sec2annotation (tosec), tosym); + prl_from, fromsym, + to, prl_to, tosym, to_p, + fromsym, prl_to, tosym); +free (prl_from); +free (prl_to);break ;case DATA_TO_ANY_INIT : { + prl_to =sec2annotation (tosec);const char *const *s = mismatch->symbol_white_list;fprintf (stderr, "The variable %s references\n"
@@ -1235,20 +1243,24 @@"If the reference is valid then annotate the\n" "variable with __init* or __refdata (see linux/init.h) " "or name the variable:\n" , - fromsym, to, sec2annotation(tosec), tosym, to_p); + fromsym, to, prl_to, tosym, to_p);while (*s)fprintf (stderr,"%s, " , *s++);fprintf (stderr,"\n" ); +free (prl_to);break ; }case TEXT_TO_ANY_EXIT : + prl_to =sec2annotation (tosec);fprintf (stderr,"The function %s() references a %s in an exit section.\n" "Often the %s %s%s has valid usage outside the exit section\n" "and the fix is to remove the %sannotation of %s.\n" , - fromsym, to, to, tosym, to_p,sec2annotation (tosec), tosym); + fromsym, to, to, tosym, to_p, prl_to, tosym); +free (prl_to);break ;case DATA_TO_ANY_EXIT : { + prl_to =sec2annotation (tosec);const char *const *s = mismatch->symbol_white_list;fprintf (stderr, "The variable %s references\n"
@@ -1256,24 +1268,31 @@"If the reference is valid then annotate the\n" "variable with __exit* (see linux/init.h) or " "name the variable:\n" , - fromsym, to, sec2annotation(tosec), tosym, to_p); + fromsym, to, prl_to, tosym, to_p);while (*s)fprintf (stderr,"%s, " , *s++);fprintf (stderr,"\n" ); +free (prl_to);break ; }case XXXINIT_TO_SOME_INIT :case XXXEXIT_TO_SOME_EXIT : + prl_from =sec2annotation (fromsec); + prl_to =sec2annotation (tosec);fprintf (stderr,"The %s %s%s%s references\n" "a %s %s%s%s.\n" "If %s is only used by %s then\n" "annotate %s with a matching annotation.\n" , - from,sec2annotation (fromsec), fromsym, from_p, - to,sec2annotation (tosec), tosym, to_p, + from, prl_from, fromsym, from_p, + to, prl_to, tosym, to_p, tosym, fromsym, tosym); +free (prl_from); +free (prl_to);break ;case ANY_INIT_TO_ANY_EXIT : + prl_from =sec2annotation (fromsec); + prl_to =sec2annotation (tosec);fprintf (stderr,"The %s %s%s%s references\n" "a %s %s%s%s.\n"
@@ -1282,11 +1301,15 @@"uses functionality in the exit path.\n" "The fix is often to remove the %sannotation of\n" "%s%s so it may be used outside an exit section.\n" , - from,sec2annotation (fromsec), fromsym, from_p, - to,sec2annotation (tosec), tosym, to_p, + from, prl_from, fromsym, from_p, + to, prl_to, tosym, to_p, sec2annotation(tosec), tosym, to_p); +free (prl_from); +free (prl_to);break ;case ANY_EXIT_TO_ANY_INIT : + prl_from =sec2annotation (fromsec); + prl_to =sec2annotation (tosec);fprintf (stderr,"The %s %s%s%s references\n" "a %s %s%s%s.\n"
@@ -1295,16 +1318,20 @@"uses functionality in the init path.\n" "The fix is often to remove the %sannotation of\n" "%s%s so it may be used outside an init section.\n" , - from,sec2annotation (fromsec), fromsym, from_p, - to,sec2annotation (tosec), tosym, to_p, - sec2annotation(tosec), tosym, to_p); + from, prl_from, fromsym, from_p, + to, prl_to, tosym, to_p, + prl_to, tosym, to_p); +free (prl_from); +free (prl_to);break ;case EXPORT_TO_INIT_EXIT : + prl_to =sec2annotation (tosec);fprintf (stderr,"The symbol %s is exported and annotated %s\n" "Fix this by removing the %sannotation of %s " "or drop the export.\n" , - tosym,sec2annotation (tosec),sec2annotation (tosec), tosym); + tosym, prl_to, prl_to, tosym); +free (prl_to);break ; }fprintf (stderr,"\n" );
Quoted 3 lines · Alexey Fomenko
Patch modified for released 2.6.35 kernel. sec2annotation returns malloc'ed buffer directly to printf as an argument. Patch lets free this buffer after printing.
Needs to be amended.
I told Alexey in private to resend new version of the patch.
Signature · 2 lines
With Best Regards, Andy Shevchenko
PATCH v3 1/1 fixed resource leak in scripts/mod/modpost.c
From: Alexey Fomenko <[email protected]>
sec2annotation() returns malloc'ed buffer directly to printf as an argument. Patch lets free this buffer after printing. Preventing ops while freeing the buffer by changing return const str to return strdup empty line.
--- scripts/mod/modpost.c | 58 ++++++++++++++++++++++++++++++++++++------------ 1 files changed, 42 insertions(+), 16 deletions(-)
scripts/mod/modpost.c +42 -16
@@ -1165,9 +1165,9 @@strcat (p,"data " ); else strcat(p, " "); -return r;/* we leak her but we do not care */ +return r; }else { -return "" ; +return strdup ("" ); } }
@@ -1195,6 +1195,8 @@ {const char *from, *from_p;const char *to, *to_p; +char *prl_from; +char *prl_to;switch (from_is_func) {
@@ -1219,16 +1221,21 @@switch (mismatch->mismatch) {case TEXT_TO_ANY_INIT : + prl_from =sec2annotation (fromsec); + prl_to =sec2annotation (tosec);fprintf (stderr,"The function %s%s() references\n" "the %s %s%s%s.\n" "This is often because %s lacks a %s\n" "annotation or the annotation of %s is wrong.\n" , -sec2annotation (fromsec), fromsym, - to,sec2annotation (tosec), tosym, to_p, - fromsym,sec2annotation (tosec), tosym); + prl_from, fromsym, + to, prl_to, tosym, to_p, + fromsym, prl_to, tosym); +free (prl_from); +free (prl_to);break ;case DATA_TO_ANY_INIT : { + prl_to =sec2annotation (tosec);const char *const *s = mismatch->symbol_white_list;fprintf (stderr, "The variable %s references\n"
@@ -1236,20 +1243,24 @@"If the reference is valid then annotate the\n" "variable with __init* or __refdata (see linux/init.h) " "or name the variable:\n" , - fromsym, to, sec2annotation(tosec), tosym, to_p); + fromsym, to, prl_to, tosym, to_p);while (*s)fprintf (stderr,"%s, " , *s++);fprintf (stderr,"\n" ); +free (prl_to);break ; }case TEXT_TO_ANY_EXIT : + prl_to =sec2annotation (tosec);fprintf (stderr,"The function %s() references a %s in an exit section.\n" "Often the %s %s%s has valid usage outside the exit section\n" "and the fix is to remove the %sannotation of %s.\n" , - fromsym, to, to, tosym, to_p,sec2annotation (tosec), tosym); + fromsym, to, to, tosym, to_p, prl_to, tosym); +free (prl_to);break ;case DATA_TO_ANY_EXIT : { + prl_to =sec2annotation (tosec);const char *const *s = mismatch->symbol_white_list;fprintf (stderr, "The variable %s references\n"
@@ -1257,24 +1268,31 @@"If the reference is valid then annotate the\n" "variable with __exit* (see linux/init.h) or " "name the variable:\n" , - fromsym, to, sec2annotation(tosec), tosym, to_p); + fromsym, to, prl_to, tosym, to_p);while (*s)fprintf (stderr,"%s, " , *s++);fprintf (stderr,"\n" ); +free (prl_to);break ; }case XXXINIT_TO_SOME_INIT :case XXXEXIT_TO_SOME_EXIT : + prl_from =sec2annotation (fromsec); + prl_to =sec2annotation (tosec);fprintf (stderr,"The %s %s%s%s references\n" "a %s %s%s%s.\n" "If %s is only used by %s then\n" "annotate %s with a matching annotation.\n" , - from,sec2annotation (fromsec), fromsym, from_p, - to,sec2annotation (tosec), tosym, to_p, + from, prl_from, fromsym, from_p, + to, prl_to, tosym, to_p, tosym, fromsym, tosym); +free (prl_from); +free (prl_to);break ;case ANY_INIT_TO_ANY_EXIT : + prl_from =sec2annotation (fromsec); + prl_to =sec2annotation (tosec);fprintf (stderr,"The %s %s%s%s references\n" "a %s %s%s%s.\n"
@@ -1283,11 +1301,15 @@"uses functionality in the exit path.\n" "The fix is often to remove the %sannotation of\n" "%s%s so it may be used outside an exit section.\n" , - from,sec2annotation (fromsec), fromsym, from_p, - to,sec2annotation (tosec), tosym, to_p, + from, prl_from, fromsym, from_p, + to, prl_to, tosym, to_p, sec2annotation(tosec), tosym, to_p); +free (prl_from); +free (prl_to);break ;case ANY_EXIT_TO_ANY_INIT : + prl_from =sec2annotation (fromsec); + prl_to =sec2annotation (tosec);fprintf (stderr,"The %s %s%s%s references\n" "a %s %s%s%s.\n"
@@ -1296,16 +1318,20 @@"uses functionality in the init path.\n" "The fix is often to remove the %sannotation of\n" "%s%s so it may be used outside an init section.\n" , - from,sec2annotation (fromsec), fromsym, from_p, - to,sec2annotation (tosec), tosym, to_p, - sec2annotation(tosec), tosym, to_p); + from, prl_from, fromsym, from_p, + to, prl_to, tosym, to_p, + prl_to, tosym, to_p); +free (prl_from); +free (prl_to);break ;case EXPORT_TO_INIT_EXIT : + prl_to =sec2annotation (tosec);fprintf (stderr,"The symbol %s is exported and annotated %s\n" "Fix this by removing the %sannotation of %s " "or drop the export.\n" , - tosym,sec2annotation (tosec),sec2annotation (tosec), tosym); + tosym, prl_to, prl_to, tosym); +free (prl_to);break ; }fprintf (stderr,"\n" );
Quoted 17 lines · Alexey Fomenko
From: Alexey Fomenko <[email protected]>
sec2annotation()returns malloc'ed buffer directly to printf as an argument. Patch lets free this buffer after printing. Preventing ops while freeing the buffer by changing return const str to return strdup empty line.Signed-off-by Alexey Fomenko <[email protected]>---
scripts/mod/modpost.c | 58 ++++++++++++++++++++++++++++++++++++------------1 files changed, 42 insertions(+), 16 deletions(-)diff -ur
linux-2.6.35/scripts/mod/modpost.clinux-2.6.35_b/scripts/mod/modpost.cscripts/mod/modpost.c 2010-08-10 12:11:25.174529109 +0300 renamed from scripts/mod/modpost.c 2010-08-10 12:11:03.854528620 +0300 +0
-0@@ -1165,9 +1165,9 @@ strcat(p, "data ");
Quoted 4 lines
else
strcat(p, " ");
- return r; /* we leak her but we do not care */
+ return r;
Here is the extra tail whitespace.
Quoted 9 lines
scripts/mod/modpost.c 2010-08-10 12:11:25.174529109 +0300 renamed from scripts/mod/modpost.c 2010-08-10 12:11:03.854528620 +0300 +0
-0@@ -1283,11 +1301,15 @@"uses functionality in the exit path.\n" "The fix is often to remove the %sannotation of\n" "%s%s so it may be used outside an exit section.\n",
- from, sec2annotation(fromsec), fromsym,from_p,
- to, sec2annotation(tosec), tosym,to_p,
+ from,prl_from, fromsym,from_p,
+ to,prl_to, tosym,to_p, sec2annotation(tosec), tosym,to_p);
^^^^^^^^^^^^^^^^^^^^^^ missed change
(after fixing above issues)
Signature · 2 lines
With Best Regards, Andy Shevchenko
PATCH v4 1/1 fixed resource leak in scripts/mod/modpost.c
From: Alexey Fomenko <[email protected]>
sec2annotation() returns malloc'ed buffer directly to printf as an argument. Patch lets free this buffer after printing. Preventing ops while freeing the buffer by changing return const str to return strdup empty line.
--- scripts/mod/modpost.c | 62 ++++++++++++++++++++++++++++++++---------------- 1 files changed, 43 insertions(+), 19 deletions(-)
scripts/mod/modpost.c +43 -17
@@ -1165,9 +1165,9 @@strcat (p,"data " ); else strcat(p, " "); -return r;/* we leak her but we do not care */ +return r; }else { -return "" ; +return strdup ("" ); } }
@@ -1195,6 +1195,8 @@ {const char *from, *from_p;const char *to, *to_p; +char *prl_from; +char *prl_to;switch (from_is_func) {
@@ -1219,16 +1221,21 @@switch (mismatch->mismatch) {case TEXT_TO_ANY_INIT : + prl_from =sec2annotation (fromsec); + prl_to =sec2annotation (tosec);fprintf (stderr,"The function %s%s() references\n" "the %s %s%s%s.\n" "This is often because %s lacks a %s\n" "annotation or the annotation of %s is wrong.\n" , -sec2annotation (fromsec), fromsym, - to,sec2annotation (tosec), tosym, to_p, - fromsym,sec2annotation (tosec), tosym); + prl_from, fromsym, + to, prl_to, tosym, to_p, + fromsym, prl_to, tosym); +free (prl_from); +free (prl_to);break ;case DATA_TO_ANY_INIT : { + prl_to =sec2annotation (tosec);const char *const *s = mismatch->symbol_white_list;fprintf (stderr, "The variable %s references\n"
@@ -1236,20 +1243,24 @@"If the reference is valid then annotate the\n" "variable with __init* or __refdata (see linux/init.h) " "or name the variable:\n" , - fromsym, to, sec2annotation(tosec), tosym, to_p); + fromsym, to, prl_to, tosym, to_p);while (*s)fprintf (stderr,"%s, " , *s++);fprintf (stderr,"\n" ); +free (prl_to);break ; }case TEXT_TO_ANY_EXIT : + prl_to =sec2annotation (tosec);fprintf (stderr,"The function %s() references a %s in an exit section.\n" "Often the %s %s%s has valid usage outside the exit section\n" "and the fix is to remove the %sannotation of %s.\n" , - fromsym, to, to, tosym, to_p,sec2annotation (tosec), tosym); + fromsym, to, to, tosym, to_p, prl_to, tosym); +free (prl_to);break ;case DATA_TO_ANY_EXIT : { + prl_to =sec2annotation (tosec);const char *const *s = mismatch->symbol_white_list;fprintf (stderr, "The variable %s references\n"
@@ -1257,24 +1268,31 @@"If the reference is valid then annotate the\n" "variable with __exit* (see linux/init.h) or " "name the variable:\n" , - fromsym, to, sec2annotation(tosec), tosym, to_p); + fromsym, to, prl_to, tosym, to_p);while (*s)fprintf (stderr,"%s, " , *s++);fprintf (stderr,"\n" ); +free (prl_to);break ; }case XXXINIT_TO_SOME_INIT :case XXXEXIT_TO_SOME_EXIT : + prl_from =sec2annotation (fromsec); + prl_to =sec2annotation (tosec);fprintf (stderr,"The %s %s%s%s references\n" "a %s %s%s%s.\n" "If %s is only used by %s then\n" "annotate %s with a matching annotation.\n" , - from,sec2annotation (fromsec), fromsym, from_p, - to,sec2annotation (tosec), tosym, to_p, + from, prl_from, fromsym, from_p, + to, prl_to, tosym, to_p, tosym, fromsym, tosym); +free (prl_from); +free (prl_to);break ;case ANY_INIT_TO_ANY_EXIT : + prl_from =sec2annotation (fromsec); + prl_to =sec2annotation (tosec);fprintf (stderr,"The %s %s%s%s references\n" "a %s %s%s%s.\n"
@@ -1283,11 +1301,15 @@"uses functionality in the exit path.\n" "The fix is often to remove the %sannotation of\n" "%s%s so it may be used outside an exit section.\n" , - from,sec2annotation (fromsec), fromsym, from_p, - to,sec2annotation (tosec), tosym, to_p, - sec2annotation(tosec), tosym, to_p); + from, prl_from, fromsym, from_p, + to, prl_to, tosym, to_p, + ptl_to, tosym, to_p); +free (prl_from); +free (prl_to);break ;case ANY_EXIT_TO_ANY_INIT : + prl_from =sec2annotation (fromsec); + prl_to =sec2annotation (tosec);fprintf (stderr,"The %s %s%s%s references\n" "a %s %s%s%s.\n"
@@ -1296,16 +1318,20 @@"uses functionality in the init path.\n" "The fix is often to remove the %sannotation of\n" "%s%s so it may be used outside an init section.\n" , - from,sec2annotation (fromsec), fromsym, from_p, - to,sec2annotation (tosec), tosym, to_p, - sec2annotation(tosec), tosym, to_p); + from, prl_from, fromsym, from_p, + to, prl_to, tosym, to_p, + prl_to, tosym, to_p); +free (prl_from); +free (prl_to);break ;case EXPORT_TO_INIT_EXIT : + prl_to =sec2annotation (tosec);fprintf (stderr,"The symbol %s is exported and annotated %s\n" "Fix this by removing the %sannotation of %s " "or drop the export.\n" , - tosym,sec2annotation (tosec),sec2annotation (tosec), tosym); + tosym, prl_to, prl_to, tosym); +free (prl_to);break ; }fprintf (stderr,"\n" );
Quoted 11 lines · Alexey Fomenko
From: Alexey Fomenko <[email protected]>
sec2annotation()returns malloc'ed buffer directly to printf as an argument. Patch lets free this buffer after printing. Preventing ops while freeing the buffer by changing return const str to return strdup empty line.Signed-off-by Alexey Fomenko <[email protected]>(quoted diff) +0
-0@@ -1283,11 +1301,15 @@"uses functionality in the exit path.\n"
Quoted 8 lines
"The fix is often to remove the %sannotation of\n" "%s%s so it may be used outside an exit section.\n",
- from, sec2annotation(fromsec), fromsym,from_p,
- to, sec2annotation(tosec), tosym,to_p,
- sec2annotation(tosec), tosym,to_p);
+ from,prl_from, fromsym,from_p,
+ to,prl_to, tosym,to_p,
+ptl_to, tosym,to_p);
Did you ever compile this code?
It looks typo here.
Quoted 9 lines
+
free(prl_from);
+free(prl_to);
break;
caseANY_EXIT_TO_ANY_INIT:
+prl_from= sec2annotation(fromsec);
+prl_to= sec2annotation(tosec); fprintf(stderr,
"The %s %s%s%s references\n" "a %s %s%s%s.\n"
Signature · 2 lines
With Best Regards, Andy Shevchenko
Quoted 11 lines · ext Andy Shevchenko
Quoted 8 lines · Alexey Fomenko
From: Alexey Fomenko <[email protected]>
sec2annotation()returns malloc'ed buffer directly to printf as an argument. Patch lets free this buffer after printing. Preventing ops while freeing the buffer by changing return const str to return strdup empty line.Signed-off-by Alexey Fomenko <[email protected]>
Quoted 12 lines
scripts/mod/modpost.c line 1306
Quoted 10 lines
scripts/mod/modpost.c +3
-3@@ -1283,11 +1301,15 @@"uses functionality in the exit path.\n" "The fix is often to remove the %sannotation of\n" "%s%s so it may be used outside an exit section.\n" , - from,sec2annotation (fromsec), fromsym, from_p, - to,sec2annotation (tosec), tosym, to_p, - sec2annotation(tosec), tosym, to_p); + from, prl_from, fromsym, from_p, + to, prl_to, tosym, to_p, + ptl_to, tosym, to_p);Did you ever compile this code?
It looks typo here.
Ever - yes, last one - no, was in a hurry. Shouldn't have been. I'll fix it.
Quoted 11 lines
Quoted 10 lines
scripts/mod/modpost.c +4
-0+free (prl_from); +free (prl_to);break ;case ANY_EXIT_TO_ANY_INIT : + prl_from =sec2annotation (fromsec); + prl_to =sec2annotation (tosec);fprintf (stderr,"The %s %s%s%s references\n" "a %s %s%s%s.\n"
A message that is not in the archive (sent off-list or not yet received): 1281445771.2063.599.camel@alex-desktop
Andy Shevchenko
Reviewed-byRe: [PATCHv4] modpost: fixed resource leak in report_sec_mismatch()
Quoted 160 lines · Alexey Fomenko
From: Alexey Fomenko <[email protected]>
sec2annotation()returns malloc'ed buffer directly to printf as an argument. Patch lets free this buffer after printing. Preventing ops while freeing the buffer by changing return const str to return strdup empty line.Signed-off-by Alexey Fomenko <[email protected]>--- scripts/mod/modpost.c | 62 ++++++++++++++++++++++++++++++++---------------- 1 files changed, 43 insertions(+), 19 deletions(-)diff -ur
linux-2.6.35/scripts/mod/modpost.clinux-2.6.35_b/scripts/mod/modpost.cscripts/mod/modpost.c +41
-16@@ -1165,9 +1165,9 @@strcat (p,"data " ); else strcat(p, " "); -return r;/* we leak her but we do not care */ +return r; }else { -return "" ; +return strdup ("" ); } }@@ -1195,6 +1195,8 @@ {const char *from, *from_p;const char *to, *to_p; +char *prl_from; +char *prl_to;switch (from_is_func) {@@ -1219,16 +1221,21 @@switch (mismatch->mismatch) {case TEXT_TO_ANY_INIT : + prl_from =sec2annotation (fromsec); + prl_to =sec2annotation (tosec);fprintf (stderr,"The function %s%s() references\n" "the %s %s%s%s.\n" "This is often because %s lacks a %s\n" "annotation or the annotation of %s is wrong.\n" , -sec2annotation (fromsec), fromsym, - to,sec2annotation (tosec), tosym, to_p, - fromsym,sec2annotation (tosec), tosym); + prl_from, fromsym, + to, prl_to, tosym, to_p, + fromsym, prl_to, tosym); +free (prl_from); +free (prl_to);break ;case DATA_TO_ANY_INIT : { + prl_to =sec2annotation (tosec);const char *const *s = mismatch->symbol_white_list;fprintf (stderr, "The variable %s references\n"@@ -1236,20 +1243,24 @@"If the reference is valid then annotate the\n" "variable with __init* or __refdata (see linux/init.h) " "or name the variable:\n" , - fromsym, to, sec2annotation(tosec), tosym, to_p); + fromsym, to, prl_to, tosym, to_p);while (*s)fprintf (stderr,"%s, " , *s++);fprintf (stderr,"\n" ); +free (prl_to);break ; }case TEXT_TO_ANY_EXIT : + prl_to =sec2annotation (tosec);fprintf (stderr,"The function %s() references a %s in an exit section.\n" "Often the %s %s%s has valid usage outside the exit section\n" "and the fix is to remove the %sannotation of %s.\n" , - fromsym, to, to, tosym, to_p,sec2annotation (tosec), tosym); + fromsym, to, to, tosym, to_p, prl_to, tosym); +free (prl_to);break ;case DATA_TO_ANY_EXIT : { + prl_to =sec2annotation (tosec);const char *const *s = mismatch->symbol_white_list;fprintf (stderr, "The variable %s references\n"@@ -1257,24 +1268,31 @@"If the reference is valid then annotate the\n" "variable with __exit* (see linux/init.h) or " "name the variable:\n" , - fromsym, to, sec2annotation(tosec), tosym, to_p); + fromsym, to, prl_to, tosym, to_p);while (*s)fprintf (stderr,"%s, " , *s++);fprintf (stderr,"\n" ); +free (prl_to);break ; }case XXXINIT_TO_SOME_INIT :case XXXEXIT_TO_SOME_EXIT : + prl_from =sec2annotation (fromsec); + prl_to =sec2annotation (tosec);fprintf (stderr,"The %s %s%s%s references\n" "a %s %s%s%s.\n" "If %s is only used by %s then\n" "annotate %s with a matching annotation.\n" , - from,sec2annotation (fromsec), fromsym, from_p, - to,sec2annotation (tosec), tosym, to_p, + from, prl_from, fromsym, from_p, + to, prl_to, tosym, to_p, tosym, fromsym, tosym); +free (prl_from); +free (prl_to);break ;case ANY_INIT_TO_ANY_EXIT : + prl_from =sec2annotation (fromsec); + prl_to =sec2annotation (tosec);fprintf (stderr,"The %s %s%s%s references\n" "a %s %s%s%s.\n"@@ -1283,11 +1301,15 @@"uses functionality in the exit path.\n" "The fix is often to remove the %sannotation of\n" "%s%s so it may be used outside an exit section.\n" , - from,sec2annotation (fromsec), fromsym, from_p, - to,sec2annotation (tosec), tosym, to_p, - sec2annotation(tosec), tosym, to_p); + from, prl_from, fromsym, from_p, + to, prl_to, tosym, to_p, + prl_to, tosym, to_p); +free (prl_from); +free (prl_to);break ;case ANY_EXIT_TO_ANY_INIT : + prl_from =sec2annotation (fromsec); + prl_to =sec2annotation (tosec);fprintf (stderr,"The %s %s%s%s references\n" "a %s %s%s%s.\n"@@ -1296,16 +1318,20 @@"uses functionality in the init path.\n" "The fix is often to remove the %sannotation of\n" "%s%s so it may be used outside an init section.\n" , - from,sec2annotation (fromsec), fromsym, from_p, - to,sec2annotation (tosec), tosym, to_p, - sec2annotation(tosec), tosym, to_p); + from, prl_from, fromsym, from_p, + to, prl_to, tosym, to_p, + prl_to, tosym, to_p); +free (prl_from); +free (prl_to);break ;case EXPORT_TO_INIT_EXIT : + prl_to =sec2annotation (tosec);
scripts/mod/modpost.c line 1337
Quoted 10 lines
scripts/mod/modpost.c +2
-1fprintf (stderr,"The symbol %s is exported and annotated %s\n" "Fix this by removing the %sannotation of %s " "or drop the export.\n" , - tosym,sec2annotation (tosec),sec2annotation (tosec), tosym); + tosym, prl_to, prl_to, tosym); +free (prl_to);break ; }fprintf (stderr,"\n" );
Now seems fine to me.
Signature · 2 lines
With Best Regards, Andy Shevchenko