• J
    don't dereference NULL after failed strdup · 57f9f4c9
    Jim Meyering 提交于
    Most of these are obvious NULL-deref bug fixes, for example,
    the ones in these files:
    
      block/curl.c
      net.c
      slirp/misc.c
    
    and the first one in block/vvfat.c.
    The others in block/vvfat.c may not lead to an immediate segfault, but I
    traced the two schedule_rename(..., strdup(path)) uses, and a failed
    strdup would appear to trigger this assertion in handle_renames_and_mkdirs:
    
    	    assert(commit->path);
    
    The conversion to use qemu_strdup in envlist_to_environ is not technically
    needed, but does avoid a theoretical leak in the caller when strdup fails
    for one value, but later succeeds in allocating another buffer(plausible,
    if one string length is much larger than the others).  The caller does
    not know the length of the returned list, and as such can only free
    pointers until it hits the first NULL.  If there are non-NULL pointers
    beyond the first, their buffers would be leaked.  This one is admittedly
    far-fetched.
    
    The two in linux-user/main.c are worth fixing to ensure that an
    OOM error is diagnosed up front, rather than letting it provoke some
    harder-to-diagnose secondary error, in case of exec failure, or worse, in
    case the exec succeeds but with an invalid list of command line options.
    However, considering how unlikely it is to encounter a failed strdup early
    in main, this isn't a big deal.  Note that adding the required uses of
    qemu_strdup here and in envlist.c induce link failures because qemu_strdup
    is not currently in any library they're linked with.  So for now, I've
    omitted those changes, as well as the fixes in target-i386/helper.c
    and target-sparc/helper.c.
    
    If you'd like to see the above discussion (or anything else)
    in the commit log, just let me know and I'll be happy to adjust.
    
    >From 9af42864fd1ea666bd25e2cecfdfae74c20aa8c7 Mon Sep 17 00:00:00 2001
    From: Jim Meyering <meyering@redhat.com>
    Date: Mon, 8 Feb 2010 18:29:29 +0100
    Subject: [PATCH] don't dereference NULL after failed strdup
    
    Handle failing strdup by replacing each use with qemu_strdup,
    so as not to dereference NULL or trigger a failing assertion.
    * block/curl.c (curl_open): s/\bstrdup\b/qemu_strdup/
    * block/vvfat.c (init_directories): Likewise.
    (get_cluster_count_for_direntry, check_directory_consistency): Likewise.
    * net.c (parse_host_src_port): Likewise.
    * slirp/misc.c (fork_exec): Likewise.
    Signed-off-by: NAnthony Liguori <aliguori@us.ibm.com>
    (cherry picked from commit 6265eb26)
    57f9f4c9
vvfat.c 80.0 KB