• Zheng Liu's avatar
    ext4: fix a BUG when opening a file with O_TMPFILE flag · e94bd349
    Zheng Liu authored
    When we try to open a file with O_TMPFILE flag, we will trigger a bug.
    The root cause is that in ext4_orphan_add() we check ->i_nlink == 0 and
    this check always fails because we set ->i_nlink = 1 in
    inode_init_always().  We can use the following program to trigger it:
    
    int main(int argc, char *argv[])
    {
    	int fd;
    
    	fd = open(argv[1], O_TMPFILE, 0666);
    	if (fd < 0) {
    		perror("open ");
    		return -1;
    	}
    	close(fd);
    	return 0;
    }
    
    The oops message looks like this:
    
    kernel BUG at fs/ext4/namei.c:2572!
    invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
    Modules linked in: dlci bridge stp hidp cmtp kernelcapi l2tp_ppp l2tp_netlink l2tp_core sctp libcrc32c rfcomm tun fuse nfnetli
    nk can_raw ipt_ULOG can_bcm x25 scsi_transport_iscsi ipx p8023 p8022 appletalk phonet psnap vmw_vsock_vmci_transport af_key vmw_vmci rose vsock atm can netrom ax25 af_rxrpc ir
    da pppoe pppox ppp_generic slhc bluetooth nfc rfkill rds caif_socket caif crc_ccitt af_802154 llc2 llc snd_...
    e94bd349
namei.c 85.7 KB