11 Jun, 2014

2 commits

  • Pull NFS client updates from Trond Myklebust:
    "Highlights include:

    - massive cleanup of the NFS read/write code by Anna and Dros
    - support multiple NFS read/write requests per page in order to deal
    with non-page aligned pNFS striping. Also cleans up the r/wsize <
    page size code nicely.
    - stable fix for ensuring inode is declared uptodate only after all
    the attributes have been checked.
    - stable fix for a kernel Oops when remounting
    - NFS over RDMA client fixes
    - move the pNFS files layout driver into its own subdirectory"

    * tag 'nfs-for-3.16-1' of git://git.linux-nfs.org/projects/trondmy/linux-nfs: (79 commits)
    NFS: populate ->net in mount data when remounting
    pnfs: fix lockup caused by pnfs_generic_pg_test
    NFSv4.1: Fix typo in dprintk
    NFSv4.1: Comment is now wrong and redundant to code
    NFS: Use raw_write_seqcount_begin/end int nfs4_reclaim_open_state
    xprtrdma: Disconnect on registration failure
    xprtrdma: Remove BUG_ON() call sites
    xprtrdma: Avoid deadlock when credit window is reset
    SUNRPC: Move congestion window constants to header file
    xprtrdma: Reset connection timeout after successful reconnect
    xprtrdma: Use macros for reconnection timeout constants
    xprtrdma: Allocate missing pagelist
    xprtrdma: Remove Tavor MTU setting
    xprtrdma: Ensure ia->ri_id->qp is not NULL when reconnecting
    xprtrdma: Reduce the number of hardway buffer allocations
    xprtrdma: Limit work done by completion handler
    xprtrmda: Reduce calls to ib_poll_cq() in completion handlers
    xprtrmda: Reduce lock contention in completion handlers
    xprtrdma: Split the completion queue
    xprtrdma: Make rpcrdma_ep_destroy() return void
    ...

    Linus Torvalds
     
  • Pull nfsd updates from Bruce Fields:
    "The largest piece is a long-overdue rewrite of the xdr code to remove
    some annoying limitations: for example, there was no way to return
    ACLs larger than 4K, and readdir results were returned only in 4k
    chunks, limiting performance on large directories.

    Also:
    - part of Neil Brown's work to make NFS work reliably over the
    loopback interface (so client and server can run on the same
    machine without deadlocks). The rest of it is coming through
    other trees.
    - cleanup and bugfixes for some of the server RDMA code, from
    Steve Wise.
    - Various cleanup of NFSv4 state code in preparation for an
    overhaul of the locking, from Jeff, Trond, and Benny.
    - smaller bugfixes and cleanup from Christoph Hellwig and
    Kinglong Mee.

    Thanks to everyone!

    This summer looks likely to be busier than usual for knfsd. Hopefully
    we won't break it too badly; testing definitely welcomed"

    * 'for-3.16' of git://linux-nfs.org/~bfields/linux: (100 commits)
    nfsd4: fix FREE_STATEID lockowner leak
    svcrdma: Fence LOCAL_INV work requests
    svcrdma: refactor marshalling logic
    nfsd: don't halt scanning the DRC LRU list when there's an RC_INPROG entry
    nfs4: remove unused CHANGE_SECURITY_LABEL
    nfsd4: kill READ64
    nfsd4: kill READ32
    nfsd4: simplify server xdr->next_page use
    nfsd4: hash deleg stateid only on successful nfs4_set_delegation
    nfsd4: rename recall_lock to state_lock
    nfsd: remove unneeded zeroing of fields in nfsd4_proc_compound
    nfsd: fix setting of NFS4_OO_CONFIRMED in nfsd4_open
    nfsd4: use recall_lock for delegation hashing
    nfsd: fix laundromat next-run-time calculation
    nfsd: make nfsd4_encode_fattr static
    SUNRPC/NFSD: Remove using of dprintk with KERN_WARNING
    nfsd: remove unused function nfsd_read_file
    nfsd: getattr for FATTR4_WORD0_FILES_AVAIL needs the statfs buffer
    NFSD: Error out when getting more than one fsloc/secinfo/uuid
    NFSD: Using type of uint32_t for ex_nflavors instead of int
    ...

    Linus Torvalds
     

31 May, 2014

1 commit


19 May, 2014

1 commit


18 Apr, 2014

1 commit

  • Mostly scripted conversion of the smp_mb__* barriers.

    Signed-off-by: Peter Zijlstra
    Acked-by: Paul E. McKenney
    Link: http://lkml.kernel.org/n/tip-55dhyhocezdw1dg7u19hmh1u@git.kernel.org
    Cc: Linus Torvalds
    Cc: linux-arch@vger.kernel.org
    Signed-off-by: Ingo Molnar

    Peter Zijlstra
     

17 Feb, 2014

2 commits

  • In gss_alloc_msg(), if the call to gss_encode_v1_msg() fails, we
    want to release the reference to the pipe_version that was obtained
    earlier in the function.

    Fixes: 9d3a2260f0f4b (SUNRPC: Fix buffer overflow checking in...)
    Signed-off-by: Trond Myklebust

    Trond Myklebust
     
  • Fix a race in which the RPC client is shutting down while the
    gss daemon is processing a downcall. If the RPC client manages to
    shut down before the gss daemon is done, then the struct gss_auth
    used in gss_release_msg() may have already been freed.

    Link: http://lkml.kernel.org/r/1392494917.71728.YahooMailNeo@web140002.mail.bf1.yahoo.com
    Reported-by: John
    Reported-by: Borislav Petkov
    Cc: stable@vger.kernel.org # 3.12+
    Signed-off-by: Trond Myklebust

    Trond Myklebust
     

11 Feb, 2014

1 commit

  • An infinite loop is caused when nfs4_establish_lease() fails
    with -EACCES. This causes nfs4_handle_reclaim_lease_error()
    to sleep a bit and resets the NFS4CLNT_LEASE_EXPIRED bit.
    This in turn causes nfs4_state_manager() to try and
    reestablished the lease, again, again, again...

    The problem is a valid RPCSEC_GSS client is being created when
    rpc.gssd is not running.

    Link: http://lkml.kernel.org/r/1392066375-16502-1-git-send-email-steved@redhat.com
    Fixes: 0ea9de0ea6a4 (sunrpc: turn warn_gssd() log message into a dprintk())
    Reported-by: Steve Dickson
    Signed-off-by: Trond Myklebust

    Trond Myklebust
     

01 Feb, 2014

1 commit

  • Pull NFS client bugfixes from Trond Myklebust:
    "Highlights:

    - Fix several races in nfs_revalidate_mapping
    - NFSv4.1 slot leakage in the pNFS files driver
    - Stable fix for a slot leak in nfs40_sequence_done
    - Don't reject NFSv4 servers that support ACLs with only ALLOW aces"

    * tag 'nfs-for-3.14-2' of git://git.linux-nfs.org/projects/trondmy/linux-nfs:
    nfs: initialize the ACL support bits to zero.
    NFSv4.1: Cleanup
    NFSv4.1: Clean up nfs41_sequence_done
    NFSv4: Fix a slot leak in nfs40_sequence_done
    NFSv4.1 free slot before resending I/O to MDS
    nfs: add memory barriers around NFS_INO_INVALID_DATA and NFS_INO_INVALIDATING
    NFS: Fix races in nfs_revalidate_mapping
    sunrpc: turn warn_gssd() log message into a dprintk()
    NFS: fix the handling of NFS_INO_INVALID_DATA flag in nfs_revalidate_mapping
    nfs: handle servers that support only ALLOW ACE type.

    Linus Torvalds
     

31 Jan, 2014

1 commit

  • Pull nfsd updates from Bruce Fields:
    - Handle some loose ends from the vfs read delegation support.
    (For example nfsd can stop breaking leases on its own in a
    fewer places where it can now depend on the vfs to.)
    - Make life a little easier for NFSv4-only configurations
    (thanks to Kinglong Mee).
    - Fix some gss-proxy problems (thanks Jeff Layton).
    - miscellaneous bug fixes and cleanup

    * 'for-3.14' of git://linux-nfs.org/~bfields/linux: (38 commits)
    nfsd: consider CLAIM_FH when handing out delegation
    nfsd4: fix delegation-unlink/rename race
    nfsd4: delay setting current_fh in open
    nfsd4: minor nfs4_setlease cleanup
    gss_krb5: use lcm from kernel lib
    nfsd4: decrease nfsd4_encode_fattr stack usage
    nfsd: fix encode_entryplus_baggage stack usage
    nfsd4: simplify xdr encoding of nfsv4 names
    nfsd4: encode_rdattr_error cleanup
    nfsd4: nfsd4_encode_fattr cleanup
    minor svcauth_gss.c cleanup
    nfsd4: better VERIFY comment
    nfsd4: break only delegations when appropriate
    NFSD: Fix a memory leak in nfsd4_create_session
    sunrpc: get rid of use_gssp_lock
    sunrpc: fix potential race between setting use_gss_proxy and the upcall rpc_clnt
    sunrpc: don't wait for write before allowing reads from use-gss-proxy file
    nfsd: get rid of unused function definition
    Define op_iattr for nfsd4_open instead using macro
    NFSD: fix compile warning without CONFIG_NFSD_V3
    ...

    Linus Torvalds
     

28 Jan, 2014

1 commit

  • The original printk() made sense when the GSSAPI codepaths were called
    only when sec=krb5* was explicitly requested. Now however, in many cases
    the nfs client will try to acquire GSSAPI credentials by default, even
    when it's not requested.

    Since we don't have a great mechanism to distinguish between the two
    cases, just turn the pr_warn into a dprintk instead. With this change we
    can also get rid of the ratelimiting.

    We do need to keep the EXPORT_SYMBOL(gssd_running) in place since
    auth_gss.ko needs it and sunrpc.ko provides it. We can however,
    eliminate the gssd_running call in the nfs code since that's a bit of a
    layering violation.

    Signed-off-by: Jeff Layton
    Signed-off-by: Trond Myklebust

    Jeff Layton
     

25 Jan, 2014

1 commit


08 Jan, 2014

1 commit


07 Jan, 2014

3 commits

  • We can achieve the same result with a cmpxchg(). This also fixes a
    potential race in use_gss_proxy(). The value of sn->use_gss_proxy could
    go from -1 to 1 just after we check it in use_gss_proxy() but before we
    acquire the spinlock. The procfile write would end up returning success
    but the value would flip to 0 soon afterward. With this method we not
    only avoid locking but the first "setter" always wins.

    Signed-off-by: Jeff Layton
    Signed-off-by: J. Bruce Fields

    Jeff Layton
     
  • An nfsd thread can call use_gss_proxy and find it set to '1' but find
    gssp_clnt still NULL, so that when it attempts the upcall the result
    will be an unnecessary -EIO.

    So, ensure that gssp_clnt is created first, and set the use_gss_proxy
    variable only if that succeeds.

    Signed-off-by: Jeff Layton
    Signed-off-by: J. Bruce Fields

    Jeff Layton
     
  • It doesn't make much sense to make reads from this procfile hang. As
    far as I can tell, only gssproxy itself will open this file and it
    never reads from it. Change it to just give the present setting of
    sn->use_gss_proxy without waiting for anything.

    Note that we do not want to call use_gss_proxy() in this codepath
    since an inopportune read of this file could cause it to be disabled
    prematurely.

    Cc: stable@vger.kernel.org
    Signed-off-by: Jeff Layton
    Signed-off-by: J. Bruce Fields

    Jeff Layton
     

07 Dec, 2013

1 commit

  • Now that we have a more reliable method to tell if gssd is running, we
    can replace the sn->gssd_running flag with a function that will query to
    see if it's up and running.

    There's also no need to attempt an upcall that we know will fail, so
    just return -EACCES if gssd isn't running. Finally, fix the warn_gss()
    message not to claim that that the upcall timed out since we don't
    necesarily perform one now when gssd isn't running, and remove the
    extraneous newline from the message.

    Signed-off-by: Jeff Layton
    Signed-off-by: Trond Myklebust

    Jeff Layton
     

06 Dec, 2013

1 commit

  • Pull NFS client bugfixes from Trond Myklebust:
    - Stable fix for a NFSv4.1 delegation and state recovery deadlock
    - Stable fix for a loop on irrecoverable errors when returning
    delegations
    - Fix a 3-way deadlock between layoutreturn, open, and state recovery
    - Update the MAINTAINERS file with contact information for Trond
    Myklebust
    - Close needs to handle NFS4ERR_ADMIN_REVOKED
    - Enabling v4.2 should not recompile nfsd and lockd
    - Fix a couple of compile warnings

    * tag 'nfs-for-3.13-3' of git://git.linux-nfs.org/projects/trondmy/linux-nfs:
    nfs: fix do_div() warning by instead using sector_div()
    MAINTAINERS: Update contact information for Trond Myklebust
    NFSv4.1: Prevent a 3-way deadlock between layoutreturn, open and state recovery
    SUNRPC: do not fail gss proc NULL calls with EACCES
    NFSv4: close needs to handle NFS4ERR_ADMIN_REVOKED
    NFSv4: Update list of irrecoverable errors on DELEGRETURN
    NFSv4 wait on recovery for async session errors
    NFS: Fix a warning in nfs_setsecurity
    NFS: Enabling v4.2 should not recompile nfsd and lockd

    Linus Torvalds
     

27 Nov, 2013

1 commit


17 Nov, 2013

1 commit

  • Pull nfsd changes from Bruce Fields:
    "This includes miscellaneous bugfixes and cleanup and a performance fix
    for write-heavy NFSv4 workloads.

    (The most significant nfsd-relevant change this time is actually in
    the delegation patches that went through Viro, fixing a long-standing
    bug that can cause NFSv4 clients to miss updates made by non-nfs users
    of the filesystem. Those enable some followup nfsd patches which I
    have queued locally, but those can wait till 3.14)"

    * 'nfsd-next' of git://linux-nfs.org/~bfields/linux: (24 commits)
    nfsd: export proper maximum file size to the client
    nfsd4: improve write performance with better sendspace reservations
    svcrpc: remove an unnecessary assignment
    sunrpc: comment typo fix
    Revert "nfsd: remove_stid can be incorporated into nfs4_put_delegation"
    nfsd4: fix discarded security labels on setattr
    NFSD: Add support for NFS v4.2 operation checking
    nfsd4: nfsd_shutdown_net needs state lock
    NFSD: Combine decode operations for v4 and v4.1
    nfsd: -EINVAL on invalid anonuid/gid instead of silent failure
    nfsd: return better errors to exportfs
    nfsd: fh_update should error out in unexpected cases
    nfsd4: need to destroy revoked delegations in destroy_client
    nfsd: no need to unhash_stid before free
    nfsd: remove_stid can be incorporated into nfs4_put_delegation
    nfsd: nfs4_open_delegation needs to remove_stid rather than unhash_stid
    nfsd: nfs4_free_stid
    nfsd: fix Kconfig syntax
    sunrpc: trim off EC bytes in GSSAPI v2 unwrap
    gss_krb5: document that we ignore sequence number
    ...

    Linus Torvalds
     

29 Oct, 2013

2 commits


27 Oct, 2013

1 commit

  • As Bruce points out in RFC 4121, section 4.2.3:

    "In Wrap tokens that provide for confidentiality, the first 16 octets
    of the Wrap token (the "header", as defined in section 4.2.6), SHALL
    be appended to the plaintext data before encryption. Filler octets
    MAY be inserted between the plaintext data and the "header.""

    ...and...

    "In Wrap tokens with confidentiality, the EC field SHALL be used to
    encode the number of octets in the filler..."

    It's possible for the client to stuff different data in that area on a
    retransmission, which could make the checksum come out wrong in the DRC
    code.

    After decrypting the blob, we should trim off any extra count bytes in
    addition to the checksum blob.

    Reported-by: "J. Bruce Fields"
    Signed-off-by: Jeff Layton
    Signed-off-by: J. Bruce Fields

    Jeff Layton
     

10 Oct, 2013

2 commits


09 Oct, 2013

2 commits


18 Sep, 2013

1 commit

  • This fixes a regression since eb6dc19d8e72ce3a957af5511d20c0db0a8bd007
    "RPCSEC_GSS: Share all credential caches on a per-transport basis" which
    could cause an occasional oops in the nfsd code (see below).

    The problem was that an auth was left referencing a client that had been
    freed. To avoid this we need to ensure that auths are shared only
    between descendants of a common client; the fact that a clone of an
    rpc_client takes a reference on its parent then ensures that the parent
    client will last as long as the auth.

    Also add a comment explaining what I think was the intention of this
    code.

    general protection fault: 0000 [#1] PREEMPT SMP
    Modules linked in: rpcsec_gss_krb5 nfsd auth_rpcgss oid_registry nfs_acl lockd sunrpc
    CPU: 3 PID: 4071 Comm: kworker/u8:2 Not tainted 3.11.0-rc2-00182-g025145f #1665
    Hardware name: Bochs Bochs, BIOS Bochs 01/01/2011
    Workqueue: nfsd4_callbacks nfsd4_do_callback_rpc [nfsd]
    task: ffff88003e206080 ti: ffff88003c384000 task.ti: ffff88003c384000
    RIP: 0010:[] [] rpc_net_ns+0x53/0x70 [sunrpc]
    RSP: 0000:ffff88003c385ab8 EFLAGS: 00010246
    RAX: 6b6b6b6b6b6b6b6b RBX: ffff88003af9a800 RCX: 0000000000000002
    RDX: ffffffffa00001a5 RSI: 0000000000000001 RDI: ffffffff81e284e0
    RBP: ffff88003c385ad8 R08: 0000000000000001 R09: 0000000000000000
    R10: 0000000000000000 R11: 0000000000000015 R12: ffff88003c990840
    R13: ffff88003c990878 R14: ffff88003c385ba8 R15: ffff88003e206080
    FS: 0000000000000000(0000) GS:ffff88003fd80000(0000) knlGS:0000000000000000
    CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b
    CR2: 00007fcdf737e000 CR3: 000000003ad2b000 CR4: 00000000000006e0
    Stack:
    ffffffffa00001a5 0000000000000006 0000000000000006 ffff88003af9a800
    ffff88003c385b08 ffffffffa00d52a4 ffff88003c385ba8 ffff88003c751bd8
    ffff88003c751bc0 ffff88003e113600 ffff88003c385b18 ffffffffa00d530c
    Call Trace:
    [] ? rpc_net_ns+0x5/0x70 [sunrpc]
    [] __gss_pipe_release+0x54/0x90 [auth_rpcgss]
    [] gss_pipe_free+0x2c/0x30 [auth_rpcgss]
    [] gss_destroy+0x9b/0xf0 [auth_rpcgss]
    [] rpcauth_release+0x23/0x30 [sunrpc]
    [] rpc_release_client+0x51/0xb0 [sunrpc]
    [] rpc_shutdown_client+0xe5/0x170 [sunrpc]
    [] ? cpuacct_charge+0xa4/0xb0
    [] ? cpuacct_charge+0x5/0xb0
    [] nfsd4_process_cb_update.isra.17+0x2f/0x210 [nfsd]
    [] ? _raw_spin_unlock_irq+0x30/0x60
    [] ? _raw_spin_unlock_irq+0x3b/0x60
    [] ? process_one_work+0x15b/0x510
    [] nfsd4_do_callback_rpc+0x8d/0xa0 [nfsd]
    [] process_one_work+0x1ce/0x510
    [] ? process_one_work+0x15b/0x510
    [] worker_thread+0x11b/0x370
    [] ? manage_workers.isra.24+0x2b0/0x2b0
    [] kthread+0xdb/0xe0
    [] ? _raw_spin_unlock_irq+0x30/0x60
    [] ? __init_kthread_worker+0x70/0x70
    [] ret_from_fork+0x7c/0xb0
    [] ? __init_kthread_worker+0x70/0x70
    Code: a5 01 00 a0 31 d2 31 f6 48 c7 c7 e0 84 e2 81 e8 f4 91 0a e1 48 8b 43 60 48 c7 c2 a5 01 00 a0 be 01 00 00 00 48 c7 c7 e0 84 e2 81 8b 98 10 07 00 00 e8 91 8f 0a e1 e8
    +3c 4e 07 e1 48 83 c4 18
    RIP [] rpc_net_ns+0x53/0x70 [sunrpc]
    RSP

    Signed-off-by: J. Bruce Fields
    Signed-off-by: Trond Myklebust

    J. Bruce Fields
     

13 Sep, 2013

1 commit

  • Pull NFS client bugfixes (part 2) from Trond Myklebust:
    "Bugfixes:
    - Fix a few credential reference leaks resulting from the
    SP4_MACH_CRED NFSv4.1 state protection code.
    - Fix the SUNRPC bloatometer footprint: convert a 256K hashtable into
    the intended 64 byte structure.
    - Fix a long standing XDR issue with FREE_STATEID
    - Fix a potential WARN_ON spamming issue
    - Fix a missing dprintk() kuid conversion

    New features:
    - Enable the NFSv4.1 state protection support for the WRITE and
    COMMIT operations"

    * tag 'nfs-for-3.12-2' of git://git.linux-nfs.org/projects/trondmy/linux-nfs:
    SUNRPC: No, I did not intend to create a 256KiB hashtable
    sunrpc: Add missing kuids conversion for printing
    NFSv4.1: sp4_mach_cred: WARN_ON -> WARN_ON_ONCE
    NFSv4.1: sp4_mach_cred: no need to ref count creds
    NFSv4.1: fix SECINFO* use of put_rpccred
    NFSv4.1: sp4_mach_cred: ask for WRITE and COMMIT
    NFSv4.1 fix decode_free_stateid

    Linus Torvalds
     

12 Sep, 2013

1 commit


11 Sep, 2013

1 commit

  • Pull nfsd updates from Bruce Fields:
    "This was a very quiet cycle! Just a few bugfixes and some cleanup"

    * 'nfsd-next' of git://linux-nfs.org/~bfields/linux:
    rpc: let xdr layer allocate gssproxy receieve pages
    rpc: fix huge kmalloc's in gss-proxy
    rpc: comment on linux_cred encoding, treat all as unsigned
    rpc: clean up decoding of gssproxy linux creds
    svcrpc: remove unused rq_resused
    nfsd4: nfsd4_create_clid_dir prints uninitialized data
    nfsd4: fix leak of inode reference on delegation failure
    Revert "nfsd: nfs4_file_get_access: need to be more careful with O_RDWR"
    sunrpc: prepare NFS for 2038
    nfsd4: fix setlease error return
    nfsd: nfs4_file_get_access: need to be more careful with O_RDWR

    Linus Torvalds
     

10 Sep, 2013

1 commit

  • Pull NFS client updates from Trond Myklebust:
    "Highlights include:

    - Fix NFSv4 recovery so that it doesn't recover lost locks in cases
    such as lease loss due to a network partition, where doing so may
    result in data corruption. Add a kernel parameter to control
    choice of legacy behaviour or not.
    - Performance improvements when 2 processes are writing to the same
    file.
    - Flush data to disk when an RPCSEC_GSS session timeout is imminent.
    - Implement NFSv4.1 SP4_MACH_CRED state protection to prevent other
    NFS clients from being able to manipulate our lease and file
    locking state.
    - Allow sharing of RPCSEC_GSS caches between different rpc clients.
    - Fix the broken NFSv4 security auto-negotiation between client and
    server.
    - Fix rmdir() to wait for outstanding sillyrename unlinks to complete
    - Add a tracepoint framework for debugging NFSv4 state recovery
    issues.
    - Add tracing to the generic NFS layer.
    - Add tracing for the SUNRPC socket connection state.
    - Clean up the rpc_pipefs mount/umount event management.
    - Merge more patches from Chuck in preparation for NFSv4 migration
    support"

    * tag 'nfs-for-3.12-1' of git://git.linux-nfs.org/projects/trondmy/linux-nfs: (107 commits)
    NFSv4: use mach cred for SECINFO_NO_NAME w/ integrity
    NFS: nfs_compare_super shouldn't check the auth flavour unless 'sec=' was set
    NFSv4: Allow security autonegotiation for submounts
    NFSv4: Disallow security negotiation for lookups when 'sec=' is specified
    NFSv4: Fix security auto-negotiation
    NFS: Clean up nfs_parse_security_flavors()
    NFS: Clean up the auth flavour array mess
    NFSv4.1 Use MDS auth flavor for data server connection
    NFS: Don't check lock owner compatability unless file is locked (part 2)
    NFS: Don't check lock owner compatibility in writes unless file is locked
    nfs4: Map NFS4ERR_WRONG_CRED to EPERM
    nfs4.1: Add SP4_MACH_CRED write and commit support
    nfs4.1: Add SP4_MACH_CRED stateid support
    nfs4.1: Add SP4_MACH_CRED secinfo support
    nfs4.1: Add SP4_MACH_CRED cleanup support
    nfs4.1: Add state protection handler
    nfs4.1: Minimal SP4_MACH_CRED implementation
    SUNRPC: Replace pointer values with task->tk_pid and rpc_clnt->cl_clid
    SUNRPC: Add an identifier for struct rpc_clnt
    SUNRPC: Ensure rpc_task->tk_pid is available for tracepoints
    ...

    Linus Torvalds
     

06 Sep, 2013

4 commits

  • In theory the linux cred in a gssproxy reply can include up to
    NGROUPS_MAX data, 256K of data. In the common case we expect it to be
    shorter. So do as the nfsv3 ACL code does and let the xdr code allocate
    the pages as they come in, instead of allocating a lot of pages that
    won't typically be used.

    Tested-by: Simo Sorce
    Signed-off-by: J. Bruce Fields

    J. Bruce Fields
     
  • The reply to a gssproxy can include up to NGROUPS_MAX gid's, which will
    take up more than a page. We therefore need to allocate an array of
    pages to hold the reply instead of trying to allocate a single huge
    buffer.

    Tested-by: Simo Sorce
    Signed-off-by: J. Bruce Fields

    J. Bruce Fields
     
  • The encoding of linux creds is a bit confusing.

    Also: I think in practice it doesn't really matter whether we treat any
    of these things as signed or unsigned, but unsigned seems more
    straightforward: uid_t/gid_t are unsigned and it simplifies the ngroups
    overflow check.

    Tested-by: Simo Sorce
    Signed-off-by: J. Bruce Fields

    J. Bruce Fields
     
  • We can use the normal coding infrastructure here.

    Two minor behavior changes:

    - we're assuming no wasted space at the end of the linux cred.
    That seems to match gss-proxy's behavior, and I can't see why
    it would need to do differently in the future.

    - NGROUPS_MAX check added: note groups_alloc doesn't do this,
    this is the caller's responsibility.

    Tested-by: Simo Sorce
    Signed-off-by: J. Bruce Fields

    J. Bruce Fields
     

04 Sep, 2013

2 commits

  • Most of the time an error from the credops crvalidate function means the
    server has sent us a garbage verifier. The gss_validate function is the
    exception where there is an -EACCES case if the user GSS_context on the client
    has expired.

    Signed-off-by: Andy Adamson
    Signed-off-by: Trond Myklebust

    Andy Adamson
     
  • This patch provides the RPC layer helper functions to allow NFS to manage
    data in the face of expired credentials - such as avoiding buffered WRITEs
    and COMMITs when the gss context will expire before the WRITEs are flushed
    and COMMITs are sent.

    These helper functions enable checking the expiration of an underlying
    credential key for a generic rpc credential, e.g. the gss_cred gss context
    gc_expiry which for Kerberos is set to the remaining TGT lifetime.

    A new rpc_authops key_timeout is only defined for the generic auth.
    A new rpc_credops crkey_to_expire is only defined for the generic cred.
    A new rpc_credops crkey_timeout is only defined for the gss cred.

    Set a credential key expiry watermark, RPC_KEY_EXPIRE_TIMEO set to 240 seconds
    as a default and can be set via a module parameter as we need to ensure there
    is time for any dirty data to be flushed.

    If key_timeout is called on a credential with an underlying credential key that
    will expire within watermark seconds, we set the RPC_CRED_KEY_EXPIRE_SOON
    flag in the generic_cred acred so that the NFS layer can clean up prior to
    key expiration.

    Checking a generic credential's underlying credential involves a cred lookup.
    To avoid this lookup in the normal case when the underlying credential has
    a key that is valid (before the watermark), a notify flag is set in
    the generic credential the first time the key_timeout is called. The
    generic credential then stops checking the underlying credential key expiry, and
    the underlying credential (gss_cred) match routine then checks the key
    expiration upon each normal use and sets a flag in the associated generic
    credential only when the key expiration is within the watermark.
    This in turn signals the generic credential key_timeout to perform the extra
    credential lookup thereafter.

    Signed-off-by: Andy Adamson
    Signed-off-by: Trond Myklebust

    Andy Adamson
     

03 Sep, 2013

1 commit


01 Sep, 2013

1 commit