• Al Viro's avatar
    iscsi-target: Drop bogus struct file usage for iSCSI/SCTP · e87ebd53
    Al Viro authored
    commit bf6932f4 upstream.
    
    From Al Viro:
    
    	BTW, speaking of struct file treatment related to sockets -
            there's this piece of code in iscsi:
            /*
             * The SCTP stack needs struct socket->file.
             */
            if ((np->np_network_transport == ISCSI_SCTP_TCP) ||
                (np->np_network_transport == ISCSI_SCTP_UDP)) {
                    if (!new_sock->file) {
                            new_sock->file = kzalloc(
                                            sizeof(struct file), GFP_KERNEL);
    
    For one thing, as far as I can see it'not true - sctp does *not* depend on
    socket->file being non-NULL; it does, in one place, check socket->file->f_flags
    for O_NONBLOCK, but there it treats NULL socket->file as "flag not set".
    Which is the case here anyway - the fake struct file created in
    __iscsi_target_login_thread() (and in iscsi_target_setup_login_socket(), with
    the same excuse) do *not* get that flag set.
    
    Moreover, it's a bloody serious violation of a bunch of asserts in VFS;
    all struct file instances should come from filp_cachep, via get_empty_filp()
    (or alloc_file(), which is a wrapper for it).  FWIW, I'm very tempted to
    do this and be done with the entire mess:
    Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
    Cc: Andy Grover <agrover@redhat.com>
    Cc: Hannes Reinecke <hare@suse.de>
    Cc: Christoph Hellwig <hch@lst.de>
    Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
    [bwh: Backported to 3.2: adjust context]
    Signed-off-by: default avatarBen Hutchings <ben@decadent.org.uk>
    e87ebd53
iscsi_target_login.c 33.7 KB