[PATCH update] kexec/fs2dt.c: wrong dt node fix

Simon Horman horms at verge.net.au
Tue Mar 1 16:14:58 PST 2016


On Fri, Feb 26, 2016 at 02:39:20PM +0100, Andrew Jones wrote:
> On Fri, Feb 26, 2016 at 07:57:55PM +0800, Dave Young wrote:
> > 2nd kernel hangs early because of a regression caused by below commit:
> > commit 68262155d8c661586b809bc5301a7dff1c378137
> > Author: Andrew Jones <drjones at redhat.com>
> > Date:   Fri Nov 20 12:31:53 2015 -0500
> > 
> >     kexec/fs2dt: cleanup pathname
> >     
> >     putnode() will add the trailing '/', avoid having two. Also
> >     pathstart is unused, get rid of it.
> >     
> >     Signed-off-by: Andrew Jones <drjones at redhat.com>
> >     Signed-off-by: Simon Horman <horms at verge.net.au>
> > 
> > The actual purpose of the commit is to avoid double slash in pathname.
> > But unfortunately in function putnode() we have below magics to get the node
> > name:
> > 	basename = strrchr(pathname,'/') + 1;
> > 	...
> > 	strcpy((void *)dt, *basename ? basename : "");
> > 	...
> > 	strcat(pathname, "/");
> > 
> > We treat none zero basename as a node name, then concat a slash to open the
> > directory for later property handling.
> > pathname originally was "/proc/device-tree/" so for the first run of putnode
> > it will cause double slashes. With the commit above mentioned there are no
> > double slashes but we will copy "device-tree" to dt. Thus kexec kernel is not
> > happy..
> > 
> > Instead let's fix it by only concating slash when the basenanme is not empty
> > and restore the initial value of pathname as "/proc/device-tree/"
> > 
> > Note: I only reproduce the issue with loading older kernel like 3.10 in RHEL. I do
> > not see the problem in new kernels in Fedora.
> > 
> > Signed-off-by: Dave Young <dyoung at redhat.com>
> 
> Err.. sorry I missed that strrchr() for the basename.
> 
> Reviewed-by: Andrew Jones <drjones at redhat.com>

Thanks, applied.



More information about the kexec mailing list