Message ID | 49EA3176.4010901@kernel.org (mailing list archive) |
---|---|
State | Rejected, archived |
Headers | show |
* Yinghai Lu <yinghai@kernel.org> wrote: > notice one system /proc/iomem some entries missed the name for pci_devices > > it turns that dev->dev.kobj name is changed after device_add. > > [Impact: fix corrupted names in /proc/iomem ] > > Signed-off-by: Yinghai Lu <yinghai@kernel.org> > > --- > lib/kobject.c | 13 +++++++++++-- > 1 file changed, 11 insertions(+), 2 deletions(-) > > Index: linux-2.6/lib/kobject.c > =================================================================== > --- linux-2.6.orig/lib/kobject.c > +++ linux-2.6/lib/kobject.c > @@ -216,12 +216,21 @@ int kobject_set_name_vargs(struct kobjec > va_list vargs) > { > const char *old_name = kobj->name; > + char *new_name; > char *s; > > - kobj->name = kvasprintf(GFP_KERNEL, fmt, vargs); > - if (!kobj->name) > + new_name = kvasprintf(GFP_KERNEL, fmt, vargs); > + if (!new_name) > return -ENOMEM; > > + /* different ? */ > + if (!strcmp(new_name, old_name)) { > + kfree(new_name); > + return 0; > + } > + > + kobj->name = new_name; > + > /* ewww... some of these buggers have '/' in the name ... */ > while ((s = strchr(kobj->name, '/'))) > s[0] = '!'; So we used the old name in the resource code, and the kfree() here corrupted the /proc/iomem output? This still looks fragile to me ... Ingo -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Ingo Molnar wrote: > * Yinghai Lu <yinghai@kernel.org> wrote: > >> notice one system /proc/iomem some entries missed the name for pci_devices >> >> it turns that dev->dev.kobj name is changed after device_add. >> >> [Impact: fix corrupted names in /proc/iomem ] >> >> Signed-off-by: Yinghai Lu <yinghai@kernel.org> >> >> --- >> lib/kobject.c | 13 +++++++++++-- >> 1 file changed, 11 insertions(+), 2 deletions(-) >> >> Index: linux-2.6/lib/kobject.c >> =================================================================== >> --- linux-2.6.orig/lib/kobject.c >> +++ linux-2.6/lib/kobject.c >> @@ -216,12 +216,21 @@ int kobject_set_name_vargs(struct kobjec >> va_list vargs) >> { >> const char *old_name = kobj->name; >> + char *new_name; >> char *s; >> >> - kobj->name = kvasprintf(GFP_KERNEL, fmt, vargs); >> - if (!kobj->name) >> + new_name = kvasprintf(GFP_KERNEL, fmt, vargs); >> + if (!new_name) >> return -ENOMEM; >> >> + /* different ? */ >> + if (!strcmp(new_name, old_name)) { >> + kfree(new_name); >> + return 0; >> + } >> + >> + kobj->name = new_name; >> + >> /* ewww... some of these buggers have '/' in the name ... */ >> while ((s = strchr(kobj->name, '/'))) >> s[0] = '!'; > > So we used the old name in the resource code, and the kfree() here > corrupted the /proc/iomem output? > if it is not changed, we still use old_name. and new_name get freed YH -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
* Yinghai Lu <yinghai@kernel.org> wrote: > Ingo Molnar wrote: > > * Yinghai Lu <yinghai@kernel.org> wrote: > > > >> notice one system /proc/iomem some entries missed the name for pci_devices > >> > >> it turns that dev->dev.kobj name is changed after device_add. > >> > >> [Impact: fix corrupted names in /proc/iomem ] > >> > >> Signed-off-by: Yinghai Lu <yinghai@kernel.org> > >> > >> --- > >> lib/kobject.c | 13 +++++++++++-- > >> 1 file changed, 11 insertions(+), 2 deletions(-) > >> > >> Index: linux-2.6/lib/kobject.c > >> =================================================================== > >> --- linux-2.6.orig/lib/kobject.c > >> +++ linux-2.6/lib/kobject.c > >> @@ -216,12 +216,21 @@ int kobject_set_name_vargs(struct kobjec > >> va_list vargs) > >> { > >> const char *old_name = kobj->name; > >> + char *new_name; > >> char *s; > >> > >> - kobj->name = kvasprintf(GFP_KERNEL, fmt, vargs); > >> - if (!kobj->name) > >> + new_name = kvasprintf(GFP_KERNEL, fmt, vargs); > >> + if (!new_name) > >> return -ENOMEM; > >> > >> + /* different ? */ > >> + if (!strcmp(new_name, old_name)) { > >> + kfree(new_name); > >> + return 0; > >> + } > >> + > >> + kobj->name = new_name; > >> + > >> /* ewww... some of these buggers have '/' in the name ... */ > >> while ((s = strchr(kobj->name, '/'))) > >> s[0] = '!'; > > > > So we used the old name in the resource code, and the kfree() here > > corrupted the /proc/iomem output? > > > if it is not changed, we still use old_name. and new_name get freed I know - you are talking about your patch. But i'm talking about the current, unpatched upstream code. It got a string displayed in /proc/iomem that got kfree()d? [and this is why the entries vanished?] That is badness somewhere _else_ (not in the kobject core i think), and your patch does not solve the real badness, it works around its symptoms AFAICS - like the first patch. Ingo -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Index: linux-2.6/lib/kobject.c =================================================================== --- linux-2.6.orig/lib/kobject.c +++ linux-2.6/lib/kobject.c @@ -216,12 +216,21 @@ int kobject_set_name_vargs(struct kobjec va_list vargs) { const char *old_name = kobj->name; + char *new_name; char *s; - kobj->name = kvasprintf(GFP_KERNEL, fmt, vargs); - if (!kobj->name) + new_name = kvasprintf(GFP_KERNEL, fmt, vargs); + if (!new_name) return -ENOMEM; + /* different ? */ + if (!strcmp(new_name, old_name)) { + kfree(new_name); + return 0; + } + + kobj->name = new_name; + /* ewww... some of these buggers have '/' in the name ... */ while ((s = strchr(kobj->name, '/'))) s[0] = '!';
notice one system /proc/iomem some entries missed the name for pci_devices it turns that dev->dev.kobj name is changed after device_add. [Impact: fix corrupted names in /proc/iomem ] Signed-off-by: Yinghai Lu <yinghai@kernel.org> --- lib/kobject.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html