[devel] suid binaries and ELF Auxiliary Vectors

Kirill A. Shutemov kirill at shutemov.name
Fri Sep 25 07:38:50 UTC 2009


Может кто-нибудь подскажет, почему suid'ый бинарник получает пустой
auxv?

Маленький testcase:

#include <elf.h>
#include <stdio.h>
#include <unistd.h>

int main(int argc, char **argv, char **envp)
{
        Elf32_auxv_t *auxv;
        while(*envp++ != NULL);

        for (auxv = (Elf32_auxv_t *)envp; auxv->a_type != AT_NULL; auxv++)
                printf("%d: 0x%08x\n", auxv->a_type, auxv->a_un.a_val);

        printf("uid: %d\n", geteuid());

        return 0;
}

Для x86_64, его нужно немного поправить.

Если у исполняемого файла нет suid-бита(или owner == uid), то auxv
печатается нормально иначе получаем только uid. Есть идеи почему?
И где код кторый это делает?

Немного о себе:
$ uname -r
2.6.30-lks-wks-alt1
$ rpm -q glibc-core
glibc-core-2.10.1-alt6


More information about the Devel mailing list