On Thu, Jan 26, 2017 at 04:24:03PM +0900, Michel Dänzer wrote:
> From: Michel Dänzer <[email protected]>
> 
> This can happen when a module fails to load:
> 
> Program received signal SIGSEGV, Segmentation fault.
> UnloadModule (_mod=0x5555559d9280) at 
> ../../../../hw/xfree86/loader/loadmod.c:848
> 848       name = mod->VersionInfo->modname;
> (gdb) bt
> #0  UnloadModule (_mod=0x5555559d9280) at 
> ../../../../hw/xfree86/loader/loadmod.c:848
> #1  0x00005555555ddd1b in LoadModule (module=module@entry=0x5555559c7ce0 
> "fbdev", options=0x0, modreq=modreq@entry=0x0, 
> errmaj=errmaj@entry=0x7fffffffe8ec) at 
> ../../../../hw/xfree86/loader/loadmod.c:824
> #2  0x00005555555edfe9 in xf86LoadModules (list=list@entry=0x5555559dcf50, 
> optlist=optlist@entry=0x0) at ../../../../hw/xfree86/common/xf86Init.c:1506
> #3  0x00005555555ee7bc in InitOutput 
> (pScreenInfo=pScreenInfo@entry=0x5555559abf80 <screenInfo>, 
> argc=argc@entry=4, argv=argv@entry=0x7fffffffeb18) at 
> ../../../../hw/xfree86/common/xf86Init.c:484
> #4  0x00005555555a885c in dix_main (argc=4, argv=0x7fffffffeb18, 
> envp=<optimized out>) at ../../dix/main.c:197
> #5  0x00007ffff5d582b1 in __libc_start_main (main=0x555555593130 <main>, 
> argc=4, argv=0x7fffffffeb18, init=<optimized out>, fini=<optimized out>, 
> rtld_fini=<optimized out>, stack_end=0x7fffffffeb08) at 
> ../csu/libc-start.c:291
> #6  0x000055555559316a in _start ()
> 
> Fixes: 8e83eacb9e2d ("loader: Remove unused path and name from ModuleDescPtr")
> Signed-off-by: Michel Dänzer <[email protected]>

Thanks, ran into this one today too :)

remote: Updating patchwork state for 
https://patchwork.freedesktop.org/project/Xorg/list/
remote: I: patch #135413 updated using rev 
45e0eb4b156f2155687cce268b07f10540fc507b.
remote: I: 1 patch(es) updated to state Accepted.
To git+ssh://git.freedesktop.org/git/xorg/xserver
   7617a0a..45e0eb4  master -> master

Cheers,
   Peter

> ---
>  hw/xfree86/loader/loadmod.c | 21 +++++++++++----------
>  1 file changed, 11 insertions(+), 10 deletions(-)
> 
> diff --git a/hw/xfree86/loader/loadmod.c b/hw/xfree86/loader/loadmod.c
> index ca77c7a9d..09aae0ea2 100644
> --- a/hw/xfree86/loader/loadmod.c
> +++ b/hw/xfree86/loader/loadmod.c
> @@ -837,7 +837,6 @@ void
>  UnloadModule(void *_mod)
>  {
>      ModuleDescPtr mod = _mod;
> -    const char *name;
>  
>      if (mod == (ModuleDescPtr) 1)
>          return;
> @@ -845,17 +844,19 @@ UnloadModule(void *_mod)
>      if (mod == NULL)
>          return;
>  
> -    name = mod->VersionInfo->modname;
> +    if (mod->VersionInfo) {
> +        const char *name = mod->VersionInfo->modname;
>  
> -    if (mod->parent)
> -        LogMessageVerbSigSafe(X_INFO, 3, "UnloadSubModule: \"%s\"\n", name);
> -    else
> -        LogMessageVerbSigSafe(X_INFO, 3, "UnloadModule: \"%s\"\n", name);
> +        if (mod->parent)
> +            LogMessageVerbSigSafe(X_INFO, 3, "UnloadSubModule: \"%s\"\n", 
> name);
> +        else
> +            LogMessageVerbSigSafe(X_INFO, 3, "UnloadModule: \"%s\"\n", name);
>  
> -    if (mod->TearDownData != ModuleDuplicated) {
> -        if ((mod->TearDownProc) && (mod->TearDownData))
> -            mod->TearDownProc(mod->TearDownData);
> -        LoaderUnload(name, mod->handle);
> +        if (mod->TearDownData != ModuleDuplicated) {
> +            if ((mod->TearDownProc) && (mod->TearDownData))
> +                mod->TearDownProc(mod->TearDownData);
> +            LoaderUnload(name, mod->handle);
> +        }
>      }
>  
>      if (mod->child)
> -- 
> 2.11.0
> 
> _______________________________________________
> [email protected]: X.Org development
> Archives: http://lists.x.org/archives/xorg-devel
> Info: https://lists.x.org/mailman/listinfo/xorg-devel
> 
_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: https://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to