Na most azért nézzük már meg ezt a kódot, mert nekem nem áll össze az egész...
struct sock *sk = tun->sk; // initialize sk with tun->sk
…
if (!tun)
return POLLERR; // if tun is NULL return error
Magyarul itt a kóder egy slampos disznó, mert vagy legális az, hogy a tun == 0 és akkor milyen alapon dobná vissza hibával később, vagy illegális de akkor hogy merészel értéket adni a tun alapján a vizsgálat előtt?
Az optimalizáló "hibáját" nem tartom annak, mert logikus amit csinál, csak ugye arra bazírozták az optimalizáló kóderei a dolgot, hogyha valaki használ egy pointert akkor azt előtte ellenőrzi, hogy érvényes-e. Az pedig, hogy a 0 az egyszerre jelzi az érvénytelent ám lehet oda mmap-olni, hát mit mondjak... a 0 értéket a pointernél azonnal kell ellenőrizni és nem pedig a felhasználás után.