lkml.org 
[lkml]   [2005]   [May]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [PATCH] namespace.c: fix bind mount from foreign namespace
    From
    Date
    > That's a bit smaller (source and compiled) as:
    >
    > if (ns2 < ns1)
    > down_write(&ns2->sem);
    > down_write(&ns1->sem);
    > if (ns2 > ns1)
    > down_write(&ns2->sem);
    >
    > (And you'll notice that does the right thing if ns2==ns1 too, in case
    > that gives you any ideas.)

    Nice.

    > Otherwise, the patch looks convincing to me.

    There's another problem with it: we don't hold a reference to
    old_nd.mnt->mnt_namespace, and the namespace going away could race
    with this function.

    So first obtain the necessary reference:

    spin_lock(&vfsmount_lock);
    ns2 = old_nd.mnt->mnt_namespace;
    if (ns2)
    get_namespace(ns2);
    spin_unlock(&vfsmount_lock);

    Then take the semaphores.

    Then recheck old_nd.mnt->mnt_namespace, because it might have been
    detached between the spin_unlock() and the down_write(&ns2->sem).

    It's starting to get a bit complex, and I'm wondering if it's worth it :)

    Miklos

    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2005-05-17 07:39    [W:0.023 / U:119.108 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site