• Ian Wienand's avatar
    [IA64] set_thread_area fails in IA32 chroot · e384f414
    Ian Wienand authored
    I tried to upgrade an IA32 chroot on my IA64 to a new glibc with TLS.
    It kept dying because set_thread_area was returning -ESRCH
    (bugs.debian.org/451939).
    
    I instrumented arch/ia64/ia32/sys_ia32.c:get_free_idx() and ended up
    seeing output like
    
    [pid] idx   desc->a  desc->b
    -----------------------------
    [2710] 0 -> c6b0ffff 40dff31b
    [2710] 1 -> 0 0
    [2710] 2 -> 0 0
    
    [2710] 0 -> c6b0ffff 40dff31b
    [2710] 1 -> c6b0ffff 40dff31b
    [2710] 2 -> 0 0
    
    [2711] 0 -> c6b0ffff 40dff31b
    [2711] 1 -> c6b0ffff 40dff31b
    [2711] 2 -> 48c0ffff 40dff317
    
    which suggested to me that TLS pointers were surviving exec() calls,
    leading to GDT pointers filling up and the eventual failure of
    get_free_idx().
    
    I think the solution is flushing the tls array on exec.
    Signed-Off-By: default avatarIan Wienand <ianw@gelato.unsw.edu.au>
    Signed-off-by: default avatarTony Luck <tony.luck@intel.com>
    e384f414
process.c 22.2 KB