Messages in this thread | | | Date | Tue, 17 Apr 2018 13:20:00 -0300 | From | Arnaldo Carvalho de Melo <> | Subject | Re: [PATCH] modules: Fix display of wrong module .text address |
| |
Em Tue, Apr 17, 2018 at 10:24:35AM +0200, Christian Borntraeger escreveu: > > > On 04/17/2018 10:20 AM, Thomas Richter wrote: > > In kernel v4.16.0 the module .text address is displayed > > wrong when using /sys/module/*/sections/.text file. > > Commit ef0010a30935 ("vsprintf: don't use 'restricted_pointer()' when > > not restricting") > > is the first bad commit. > > > > Here is the issue, using module qeth_l2 on s390 which is the > > ethernet device driver: > > > > [root@s35lp76 ~]# lsmod > > Module Size Used by > > qeth_l2 94208 1 > > ... > > > > [root@s35lp76 ~]# cat /proc/modules | egrep '^qeth_l2' > > qeth_l2 94208 1 - Live 0x000003ff80401000 > > ^ This is the correct address in memory > > [root@s35lp76 ~]# cat /sys/module/qeth_l2/sections/.text > > 0x0000000018ea8363 <---- This is a wrong address > > [root@s35lp76 ~]# > > > > This breaks the perf tool which uses this address on s390 > > to calculate start of .text section in memory. > > > > Fix this by printing the correct (unhashed) address. > > > > Thanks to Jessica Yu for helping on this. > > > > Suggested-by: Linus Torvalds <torvalds@linux-foundation.org> > > Signed-off-by: Thomas Richter <tmricht@linux.ibm.com> > > Cc: Jessica Yu <jeyu@kernel.org> > > CC stable?
Adding the missing:
Fixes: ef0010a30935 ("vsprintf: don't use 'restricted_pointer()' when not restricting")
Should be enough?
- Arnaldo
> > --- > > kernel/module.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/kernel/module.c b/kernel/module.c > > index a6e43a5806a1..77ab7211ddef 100644 > > --- a/kernel/module.c > > +++ b/kernel/module.c > > @@ -1472,7 +1472,7 @@ static ssize_t module_sect_show(struct module_attribute *mattr, > > { > > struct module_sect_attr *sattr = > > container_of(mattr, struct module_sect_attr, mattr); > > - return sprintf(buf, "0x%pK\n", (void *)sattr->address); > > + return sprintf(buf, "%#lx\n", kptr_restrict < 2 ? sattr->address : 0); > > } > > > > static void free_sect_attrs(struct module_sect_attrs *sect_attrs) > >
| |