faccio un po di anamnesi: (segnalatemi gli errori)
tutto inizia quando scopro che "mount" ha SUID impostato,
incuriosito cerco nei sorgenti se e come lo controlla:
...
if (getuid () != geteuid ()) {
suid = 1;
...
mi informo in chat, sembra che sia una funzione nelle glic
in effetti nel "geteuid.c" vedo:
...
INTERNAL_SYSCALL (geteuid, err, 0);
SYS_getuid32 e __NR_getuid32
...
allora mi ridirigo verso la syscall : sys_getuid all'interno del kernel:
sempre aiutato dalla rete:
- che richiama: high2lowuid()
return high2lowuid(current_euid());
la quale current_euid in ./include/linux/cred.h
#define current_euid() (current_cred_xxx(euid))
prenderebbe il valore di un campo della struct
#define current_cred_xxx(xxx) current->cred->xxx
per cui il preprocessore trasforma current_cred_xxx(euid) in current->cred->euid
grazie
(soprattutto della pazienza: IppatsuMan, ech0s7,...)