[ 
https://issues.apache.org/jira/browse/HDFS-10193?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

John Thiltges updated HDFS-10193:
---------------------------------
    Attachment: HDFS-10193.001.patch

This patch checks the getUsername() return value in fuseConnectAsThreadUid(), 
following the same pattern as get_trash_base().

> fuse_dfs segfaults if uid cannot be resolved to a username
> ----------------------------------------------------------
>
>                 Key: HDFS-10193
>                 URL: https://issues.apache.org/jira/browse/HDFS-10193
>             Project: Hadoop HDFS
>          Issue Type: Bug
>          Components: fuse-dfs
>    Affects Versions: 2.0.0-alpha, 2.6.0
>         Environment: Confirmed with Cloudera 
> hadoop-hdfs-fuse-2.6.0+cdh5.5.0+921-1.cdh5.5.0.p0.15.el6.x86_64 on CentOS 6
>            Reporter: John Thiltges
>         Attachments: HDFS-10193.001.patch
>
>
> When a user does an 'ls' on a HDFS FUSE mount, dfs_getattr() is called and 
> fuse_dfs attempts to resolve the user's uid into a username string with 
> getUsername(). If this lookup is unsuccessful, getUsername() returns NULL 
> leading to a segfault in hdfsConnCompare().
> Sites storing NSS info in a remote database (such as LDAP) will occasionally 
> have NSS failures if there are connectivity or daemon issues. Running 
> processes accessing the HDFS mount during this time may cause the fuse_dfs 
> process to crash, disabling the mount.
> To reproduce the issue:
> 1) Add a new local user
> 2) su to the new user
> 3) As root, edit /etc/passwd, changing the new user's uid number
> 4) As the new user, do an ls on an HDFS FUSE mount. This should cause a 
> segfault.
> Backtrace from fuse_dfs segfault 
> (hadoop-hdfs-fuse-2.0.0+545-1.cdh4.1.1.p0.21.osg33.el6.x86_64)
> {noformat}
> #0  0x0000003f43c32625 in raise (sig=<value optimized out>) at 
> ../nptl/sysdeps/unix/sysv/linux/raise.c:64
> #1  0x0000003f43c33e05 in abort () at abort.c:92
> #2  0x0000003f46beb785 in os::abort (dump_core=true) at 
> /usr/src/debug/java-1.7.0-openjdk/openjdk/hotspot/src/os/linux/vm/os_linux.cpp:1640
> #3  0x0000003f46d5f03f in VMError::report_and_die (this=0x7ffa3cdf86f0) at 
> /usr/src/debug/java-1.7.0-openjdk/openjdk/hotspot/src/share/vm/utilities/vmError.cpp:1075
> #4  0x0000003f46d5f70b in crash_handler (sig=11, info=0x7ffa3cdf88b0, 
> ucVoid=0x7ffa3cdf8780) at 
> /usr/src/debug/java-1.7.0-openjdk/openjdk/hotspot/src/os/linux/vm/vmError_linux.cpp:106
> #5  <signal handler called>
> #6  os::is_first_C_frame (fr=<value optimized out>) at 
> /usr/src/debug/java-1.7.0-openjdk/openjdk/hotspot/src/share/vm/runtime/os.cpp:1025
> #7  0x0000003f46d5e071 in VMError::report (this=0x7ffa3cdf9560, 
> st=0x7ffa3cdf93e0) at 
> /usr/src/debug/java-1.7.0-openjdk/openjdk/hotspot/src/share/vm/utilities/vmError.cpp:617
> #8  0x0000003f46d5ebad in VMError::report_and_die (this=0x7ffa3cdf9560) at 
> /usr/src/debug/java-1.7.0-openjdk/openjdk/hotspot/src/share/vm/utilities/vmError.cpp:1009
> #9  0x0000003f46bf0322 in JVM_handle_linux_signal (sig=11, 
> info=0x7ffa3cdf9730, ucVoid=0x7ffa3cdf9600, abort_if_unrecognized=1021285600) 
> at 
> /usr/src/debug/java-1.7.0-openjdk/openjdk/hotspot/src/os_cpu/linux_x86/vm/os_linux_x86.cpp:531
> #10 <signal handler called>
> #11 __strcmp_sse42 () at ../sysdeps/x86_64/multiarch/strcmp.S:259
> #12 0x0000000000403d3d in hdfsConnCompare (head=<value optimized out>, 
> elm=<value optimized out>) at 
> /usr/src/debug/hadoop-2.0.0-cdh4.1.1/src/hadoop-hdfs-project/hadoop-hdfs/src/main/native/fuse-dfs/fuse_connect.c:204
> #13 hdfsConnTree_RB_FIND (head=<value optimized out>, elm=<value optimized 
> out>) at 
> /usr/src/debug/hadoop-2.0.0-cdh4.1.1/src/hadoop-hdfs-project/hadoop-hdfs/src/main/native/fuse-dfs/fuse_connect.c:81
> #14 0x0000000000404245 in hdfsConnFind (usrname=0x0, ctx=0x7ff95013b800, 
> out=0x7ffa3cdf9c60) at 
> /usr/src/debug/hadoop-2.0.0-cdh4.1.1/src/hadoop-hdfs-project/hadoop-hdfs/src/main/native/fuse-dfs/fuse_connect.c:220
> #15 fuseConnect (usrname=0x0, ctx=0x7ff95013b800, out=0x7ffa3cdf9c60) at 
> /usr/src/debug/hadoop-2.0.0-cdh4.1.1/src/hadoop-hdfs-project/hadoop-hdfs/src/main/native/fuse-dfs/fuse_connect.c:517
> #16 0x0000000000404337 in fuseConnectAsThreadUid (conn=0x7ffa3cdf9c60) at 
> /usr/src/debug/hadoop-2.0.0-cdh4.1.1/src/hadoop-hdfs-project/hadoop-hdfs/src/main/native/fuse-dfs/fuse_connect.c:544
> #17 0x0000000000404c55 in dfs_getattr (path=0x7ff950150de0 "/user/users01", 
> st=0x7ffa3cdf9d20) at 
> /usr/src/debug/hadoop-2.0.0-cdh4.1.1/src/hadoop-hdfs-project/hadoop-hdfs/src/main/native/fuse-dfs/fuse_impls_getattr.c:37
> #18 0x0000003f47c0b353 in lookup_path (f=0x15e39f0, nodeid=22546, 
> name=0x7ff9602d0058 "users01", path=<value optimized out>, e=0x7ffa3cdf9d10, 
> fi=<value optimized out>) at fuse.c:1824
> #19 0x0000003f47c0d865 in fuse_lib_lookup (req=0x7ff950003fe0, parent=22546, 
> name=0x7ff9602d0058 "users01") at fuse.c:2017
> #20 0x0000003f47c120ef in fuse_do_work (data=0x7ff9600e3f30) at 
> fuse_loop_mt.c:107
> #21 0x0000003f44407aa1 in start_thread (arg=0x7ffa3cdfa700) at 
> pthread_create.c:301
> #22 0x0000003f43ce893d in clone () at 
> ../sysdeps/unix/sysv/linux/x86_64/clone.S:115
> {noformat}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to