25 Dec, 2016

2 commits

  • This was entirely automated, using the script by Al:

    PATT='^[[:blank:]]*#[[:blank:]]*include[[:blank:]]*'
    sed -i -e "s!$PATT!#include !" \
    $(git grep -l "$PATT"|grep -v ^include/linux/uaccess.h)

    to do the replacement at the end of the merge window.

    Requested-by: Al Viro
    Signed-off-by: Linus Torvalds

    Linus Torvalds
     
  • Pull cifs fixes from Steve French:
    "This ncludes various cifs/smb3 bug fixes, mostly for stable as well.

    In the next week I expect that Germano will have some reconnection
    fixes, and also I expect to have the remaining pieces of the snapshot
    enablement and SMB3 ACLs, but wanted to get this set of bug fixes in"

    * 'for-next' of git://git.samba.org/sfrench/cifs-2.6:
    cifs_get_root shouldn't use path with tree name
    Fix default behaviour for empty domains and add domainauto option
    cifs: use %16phN for formatting md5 sum
    cifs: Fix smbencrypt() to stop pointing a scatterlist at the stack
    CIFS: Fix a possible double locking of mutex during reconnect
    CIFS: Fix a possible memory corruption during reconnect
    CIFS: Fix a possible memory corruption in push locks
    CIFS: Fix missing nls unload in smb2_reconnect()
    CIFS: Decrease verbosity of ioctl call
    SMB3: parsing for new snapshot timestamp mount parm

    Linus Torvalds
     

18 Dec, 2016

1 commit

  • …/linux/kernel/git/mszeredi/vfs

    Pull partial readlink cleanups from Miklos Szeredi.

    This is the uncontroversial part of the readlink cleanup patch-set that
    simplifies the default readlink handling.

    Miklos and Al are still discussing the rest of the series.

    * git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/vfs:
    vfs: make generic_readlink() static
    vfs: remove ".readlink = generic_readlink" assignments
    vfs: default to generic_readlink()
    vfs: replace calling i_op->readlink with vfs_readlink()
    proc/self: use generic_readlink
    ecryptfs: use vfs_get_link()
    bad_inode: add missing i_op initializers

    Linus Torvalds
     

15 Dec, 2016

3 commits

  • When a server returns the optional flag SMB_SHARE_IS_IN_DFS in response
    to a tree connect, cifs_build_path_to_root() will return a pathname
    which includes the hostname. This causes problems with cifs_get_root()
    which separates each component and does a lookup for each component of
    the path which in this case will incorrectly include looking up the
    hostname component as a path component.

    We encountered a problem with dfs shares hosted by a Netapp. When
    connecting to nodes pointed to by the DFS share. The tree connect for
    these nodes return SMB_SHARE_IS_IN_DFS resulting failures in lookup
    in cifs_get_root().

    RH bz: 1373153
    The patch was tested against a Netapp simulator and by a user using an
    actual Netapp server.

    Signed-off-by: Sachin Prabhu
    Reported-by: Pierguido Lambri
    Reviewed-by: Jeff Layton
    Signed-off-by: Steve French

    Sachin Prabhu
     
  • With commit 2b149f119 many things have been fixed/introduced.
    However, the default behaviour for RawNTLMSSP authentication
    seems to be wrong in case the domain is not passed on the command line.

    The main points (see below) of the patch are:
    - It alignes behaviour with Windows clients
    - It fixes backward compatibility
    - It fixes UPN

    I compared this behavour with the one from a Windows 10 command line
    client. When no domains are specified on the command line, I traced
    the packets and observed that the client does send an empty
    domain to the server.
    In the linux kernel case, the empty domain is replaced by the
    primary domain communicated by the SMB server.
    This means that, if the credentials are valid against the local server
    but that server is part of a domain, then the kernel module will
    ask to authenticate against that domain and we will get LOGON failure.

    I compared the packet trace from the smbclient when no domain is passed
    and, in that case, a default domain from the client smb.conf is taken.
    Apparently, connection succeeds anyway, because when the domain passed
    is not valid (in my case WORKGROUP), then the local one is tried and
    authentication succeeds. I tried with any kind of invalid domain and
    the result was always a connection.

    So, trying to interpret what to do and picking a valid domain if none
    is passed, seems the wrong thing to do.
    To this end, a new option "domainauto" has been added in case the
    user wants a mechanism for guessing.

    Without this patch, backward compatibility also is broken.
    With kernel 3.10, the default auth mechanism was NTLM.
    One of our testing servers accepted NTLM and, because no
    domains are passed, authentication was local.

    Moving to RawNTLMSSP forced us to change our command line
    to add a fake domain to pass to prevent this mechanism to kick in.

    For the same reasons, UPN is broken because the domain is specified
    in the username.
    The SMB server will work out the domain from the UPN and authenticate
    against the right server.
    Without the patch, though, given the domain is empty, it gets replaced
    with another domain that could be the wrong one for the authentication.

    Signed-off-by: Germano Percossi
    Acked-by: Pavel Shilovsky
    Signed-off-by: Steve French

    Germano Percossi
     
  • Passing a gazillion arguments takes a lot of code:

    add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-253 (-253)

    Signed-off-by: Rasmus Villemoes
    Reviewed-by: Pavel Shilovsky
    Signed-off-by: Steve French

    Rasmus Villemoes
     

14 Dec, 2016

2 commits

  • smbencrypt() points a scatterlist to the stack, which is breaks if
    CONFIG_VMAP_STACK=y.

    Fix it by switching to crypto_cipher_encrypt_one(). The new code
    should be considerably faster as an added benefit.

    This code is nearly identical to some code that Eric Biggers
    suggested.

    Cc: stable@vger.kernel.org # 4.9 only
    Reported-by: Eric Biggers
    Signed-off-by: Andy Lutomirski
    Acked-by: Jeff Layton
    Signed-off-by: Steve French

    Andy Lutomirski
     
  • Pull block layer updates from Jens Axboe:
    "This is the main block pull request this series. Contrary to previous
    release, I've kept the core and driver changes in the same branch. We
    always ended up having dependencies between the two for obvious
    reasons, so makes more sense to keep them together. That said, I'll
    probably try and keep more topical branches going forward, especially
    for cycles that end up being as busy as this one.

    The major parts of this pull request is:

    - Improved support for O_DIRECT on block devices, with a small
    private implementation instead of using the pig that is
    fs/direct-io.c. From Christoph.

    - Request completion tracking in a scalable fashion. This is utilized
    by two components in this pull, the new hybrid polling and the
    writeback queue throttling code.

    - Improved support for polling with O_DIRECT, adding a hybrid mode
    that combines pure polling with an initial sleep. From me.

    - Support for automatic throttling of writeback queues on the block
    side. This uses feedback from the device completion latencies to
    scale the queue on the block side up or down. From me.

    - Support from SMR drives in the block layer and for SD. From Hannes
    and Shaun.

    - Multi-connection support for nbd. From Josef.

    - Cleanup of request and bio flags, so we have a clear split between
    which are bio (or rq) private, and which ones are shared. From
    Christoph.

    - A set of patches from Bart, that improve how we handle queue
    stopping and starting in blk-mq.

    - Support for WRITE_ZEROES from Chaitanya.

    - Lightnvm updates from Javier/Matias.

    - Supoort for FC for the nvme-over-fabrics code. From James Smart.

    - A bunch of fixes from a whole slew of people, too many to name
    here"

    * 'for-4.10/block' of git://git.kernel.dk/linux-block: (182 commits)
    blk-stat: fix a few cases of missing batch flushing
    blk-flush: run the queue when inserting blk-mq flush
    elevator: make the rqhash helpers exported
    blk-mq: abstract out blk_mq_dispatch_rq_list() helper
    blk-mq: add blk_mq_start_stopped_hw_queue()
    block: improve handling of the magic discard payload
    blk-wbt: don't throttle discard or write zeroes
    nbd: use dev_err_ratelimited in io path
    nbd: reset the setup task for NBD_CLEAR_SOCK
    nvme-fabrics: Add FC LLDD loopback driver to test FC-NVME
    nvme-fabrics: Add target support for FC transport
    nvme-fabrics: Add host support for FC transport
    nvme-fabrics: Add FC transport LLDD api definitions
    nvme-fabrics: Add FC transport FC-NVME definitions
    nvme-fabrics: Add FC transport error codes to nvme.h
    Add type 0x28 NVME type code to scsi fc headers
    nvme-fabrics: patch target code in prep for FC transport support
    nvme-fabrics: set sqe.command_id in core not transports
    parser: add u64 number parser
    nvme-rdma: align to generic ib_event logging helper
    ...

    Linus Torvalds
     

09 Dec, 2016

1 commit


06 Dec, 2016

4 commits

  • With the current code it is possible to lock a mutex twice when
    a subsequent reconnects are triggered. On the 1st reconnect we
    reconnect sessions and tcons and then persistent file handles.
    If the 2nd reconnect happens during the reconnecting of persistent
    file handles then the following sequence of calls is observed:

    cifs_reopen_file -> SMB2_open -> small_smb2_init -> smb2_reconnect
    -> cifs_reopen_persistent_file_handles -> cifs_reopen_file (again!).

    So, we are trying to acquire the same cfile->fh_mutex twice which
    is wrong. Fix this by moving reconnecting of persistent handles to
    the delayed work (smb2_reconnect_server) and submitting this work
    every time we reconnect tcon in SMB2 commands handling codepath.

    This can also lead to corruption of a temporary file list in
    cifs_reopen_persistent_file_handles() because we can recursively
    call this function twice.

    Cc: Stable # v4.9+
    Signed-off-by: Pavel Shilovsky

    Pavel Shilovsky
     
  • We can not unlock/lock cifs_tcp_ses_lock while walking through ses
    and tcon lists because it can corrupt list iterator pointers and
    a tcon structure can be released if we don't hold an extra reference.
    Fix it by moving a reconnect process to a separate delayed work
    and acquiring a reference to every tcon that needs to be reconnected.
    Also do not send an echo request on newly established connections.

    CC: Stable
    Signed-off-by: Pavel Shilovsky

    Pavel Shilovsky
     
  • If maxBuf is not 0 but less than a size of SMB2 lock structure
    we can end up with a memory corruption.

    Cc: Stable
    Signed-off-by: Pavel Shilovsky

    Pavel Shilovsky
     
  • Cc: Stable
    Acked-by: Sachin Prabhu
    Signed-off-by: Pavel Shilovsky

    Pavel Shilovsky
     

03 Dec, 2016

1 commit


01 Dec, 2016

1 commit

  • New mount option "snapshot=" to allow mounting an earlier
    version of the remote volume (if such a snapshot exists on
    the server).

    Note that eventually specifying a snapshot time of 1 will allow
    the user to mount the oldest snapshot. A subsequent patch
    add the processing for that and another for actually specifying
    the "time warp" create context on SMB2/SMB3 open.

    Check to make sure SMB2 negotiated, and ensure that
    we use a different tcon if mount same share twice
    but with different snaphshot times

    Signed-off-by: Steve French
    Reviewed-by: Pavel Shilovsky

    Steve French
     

29 Nov, 2016

3 commits

  • Commit 2211d5ba5c6c ("posix_acl: xattr representation cleanups")
    removes the typedefs and the zero-length a_entries array in struct
    posix_acl_xattr_header, and uses bare struct posix_acl_xattr_header
    and struct posix_acl_xattr_entry directly.

    But it failed to iterate over posix acl slots when converting posix
    acls to CIFS format, which results in several test failures in
    xfstests (generic/053 generic/105) when testing against a samba v1
    server, starting from v4.9-rc1 kernel. e.g.

    [root@localhost xfstests]# diff -u tests/generic/105.out /root/xfstests/results//generic/105.out.bad
    --- tests/generic/105.out 2016-09-19 16:33:28.577962575 +0800
    +++ /root/xfstests/results//generic/105.out.bad 2016-10-22 15:41:15.201931110 +0800
    @@ -1,3 +1,4 @@
    QA output created by 105
    -rw-r--r-- root
    +setfacl: subdir: Invalid argument
    -rw-r--r-- root

    Fix it by introducing a new "ace" var, like what
    cifs_copy_posix_acl() does, and iterating posix acl xattr entries
    over it in the for loop.

    Signed-off-by: Eryu Guan
    Signed-off-by: Steve French

    Eryu Guan
     
  • Commit 4fcd1813e640 ("Fix reconnect to not defer smb3 session reconnect
    long after socket reconnect") changes the behaviour of the SMB2 echo
    service and causes it to renegotiate after a socket reconnect. However
    under default settings, the echo service could take up to 120 seconds to
    be scheduled.

    The patch forces the echo service to be called immediately resulting a
    negotiate call being made immediately on reconnect.

    Signed-off-by: Sachin Prabhu
    Reviewed-by: Pavel Shilovsky
    Signed-off-by: Steve French

    Sachin Prabhu
     
  • Andy Lutromirski's new virtually mapped kernel stack allocations moves
    kernel stacks the vmalloc area. This triggers the bug
    kernel BUG at ./include/linux/scatterlist.h:140!
    at calc_seckey()->sg_init()

    Signed-off-by: Sachin Prabhu
    Signed-off-by: Steve French
    Reviewed-by: Jeff Layton

    Sachin Prabhu
     

01 Nov, 2016

1 commit


15 Oct, 2016

2 commits

  • New mount option "idsfromsid" indicates to cifs.ko that
    it should try to retrieve the uid and gid owner fields
    from special sids. This patch adds the code to parse the owner
    sids in the ACL to see if they match, and if so populate the
    uid and/or gid from them. This is faster than upcalling for
    them and asking winbind, and is a fairly common case, and is
    also helpful when cifs.upcall and idmapping is not configured.

    Signed-off-by: Steve French
    Reviewed-by: Shirish Pargaonkar
    Reviewed-by: Jeff Layton
    Reviewed-by: Pavel Shilovsky

    Steve French
     
  • Add "idsfromsid" mount option to indicate to cifs.ko that it should
    try to retrieve the uid and gid owner fields from special sids in the
    ACL if present. This first patch just adds the parsing for the mount
    option.

    Signed-off-by: Steve French
    Reviewed-by: Shirish Pargaonkar
    Reviewed-by: Pavel Shilovsky

    Steve French
     

14 Oct, 2016

8 commits


13 Oct, 2016

11 commits

  • Add mount option "max_credits" to allow setting maximum SMB3
    credits to any value from 10 to 64000 (default is 32000).
    This can be useful to workaround servers with problems allocating
    credits, or to throttle the client to use smaller amount of
    simultaneous i/o or to workaround server performance issues.

    Also adds a cap, so that even if the server granted us more than
    65000 credits due to a server bug, we would not use that many.

    Signed-off-by: Steve French

    Steve French
     
  • Continuous Availability features like persistent handles
    require that clients reconnect their open files, not
    just the sessions, soon after the network connection comes
    back up, otherwise the server will throw away the state
    (byte range locks, leases, deny modes) on those handles
    after a timeout.

    Add code to reconnect handles when use_persistent set
    (e.g. Continuous Availability shares) after tree reconnect.

    Signed-off-by: Aurelien Aptel
    Reviewed-by: Germano Percossi
    Signed-off-by: Steve French

    Steve French
     
  • Remove the global file_list_lock to simplify cifs/smb3 locking and
    have spinlocks that more closely match the information they are
    protecting.

    Add new tcon->open_file_lock and file->file_info_lock spinlocks.
    Locks continue to follow a heirachy,
    cifs_socket --> cifs_ses --> cifs_tcon --> cifs_file
    where global tcp_ses_lock still protects socket and cifs_ses, while the
    the newer locks protect the lower level structure's information
    (tcon and cifs_file respectively).

    CC: Stable
    Signed-off-by: Steve French
    Signed-off-by: Pavel Shilovsky
    Reviewed-by: Aurelien Aptel
    Reviewed-by: Germano Percossi

    Steve French
     
  • Patch a6b5058 results in -EREMOTE returned by is_path_accessible() in
    cifs_mount() to be ignored which breaks DFS mounting.

    Signed-off-by: Sachin Prabhu
    Reviewed-by: Aurelien Aptel
    CC: Stable
    Signed-off-by: Steve French

    Sachin Prabhu
     
  • When we open a durable handle we give a Globally Unique
    Identifier (GUID) to the server which we must keep for later reference
    e.g. when reopening persistent handles on reconnection.

    Without this the GUID generated for a new persistent handle was lost and
    16 zero bytes were used instead on re-opening.

    Signed-off-by: Aurelien Aptel
    CC: Stable
    Signed-off-by: Steve French

    Aurelien Aptel
     
  • GUIDs although random, and 16 bytes, need to be generated as
    proper uuids.

    Signed-off-by: Steve French
    Reviewed-by: Aurelien Aptel
    Reported-by: David Goebels
    CC: Stable

    Steve French
     
  • Signed-off-by: Steve French
    CC: Stable
    Reported-by: David Goebel

    Steve French
     
  • The kernel client requests 2 credits for many operations even though
    they only use 1 credit (presumably to build up a buffer of credit).
    Some servers seem to give the client as much credit as is requested. In
    this case, the amount of credit the client has continues increasing to
    the point where (server->credits * MAX_BUFFER_SIZE) overflows in
    smb2_wait_mtu_credits().

    Fix this by throttling the credit requests if an set limit is reached.
    For async requests where the credit charge may be > 1, request as much
    credit as what is charged.
    The limit is chosen somewhat arbitrarily. The Windows client
    defaults to 128 credits, the Windows server allows clients up to
    512 credits (or 8192 for Windows 2016), and the NetApp server
    (and at least one other) does not limit clients at all.
    Choose a high enough value such that the client shouldn't limit
    performance.

    This behavior was seen with a NetApp filer (NetApp Release 9.0RC2).

    Signed-off-by: Ross Lagerwall
    CC: Stable
    Signed-off-by: Steve French

    Ross Lagerwall
     
  • In debugging smb3, it is useful to display the number
    of credits available, so we can see when the server has not granted
    sufficient operations for the client to make progress, or alternatively
    the client has requested too many credits (as we saw in a recent bug)
    so we can compare with the number of credits the server thinks
    we have.

    Add a /proc/fs/cifs/DebugData line to display the client view
    on how many credits are available.

    Signed-off-by: Steve French
    Reported-by: Germano Percossi
    CC: Stable

    Steve French
     
  • Add parsing for new pseudo-xattr user.cifs.creationtime file
    attribute to allow backup and test applications to view
    birth time of file on cifs/smb3 mounts.

    Signed-off-by: Steve French

    Steve French
     
  • Add parsing for new pseudo-xattr user.cifs.dosattrib file attribute
    so tools can recognize what kind of file it is, and verify if common
    SMB3 attributes (system, hidden, archive, sparse, indexed etc.) are
    set.

    Signed-off-by: Steve French
    Reviewed-by: Pavel Shilovsky

    Steve French