1. 17 Feb, 2015 1 commit
    • David Ramos's avatar
      svcrpc: fix memory leak in gssp_accept_sec_context_upcall · a1d1e9be
      David Ramos authored
      Our UC-KLEE tool found a kernel memory leak of 512 bytes (on x86_64) for
      each call to gssp_accept_sec_context_upcall()
      (net/sunrpc/auth_gss/gss_rpc_upcall.c). Since it appears that this call
      can be triggered by remote connections (at least, from a cursory a
      glance at the call chain), it may be exploitable to cause kernel memory
      exhaustion. We found the bug in kernel 3.16.3, but it appears to date
      back to commit 9dfd87da (2013-08-20).
      
      The gssp_accept_sec_context_upcall() function performs a pair of calls
      to gssp_alloc_receive_pages() and gssp_free_receive_pages().  The first
      allocates memory for arg->pages.  The second then frees the pages
      pointed to by the arg->pages array, but not the array itself.
      Reported-by: default avatarDavid A. Ramos <daramos@stanford.edu>
      Fixes: 9dfd87da ("rpc: fix huge kmalloc's in gss-proxy”)
      Signed-off-by: default avatarDavid A. Ramos <daramos@stanford.edu>
      Signed-off-by: default avatarJ. Bruce Fields <bfields@redhat.com>
      a1d1e9be
  2. 16 Feb, 2015 1 commit
  3. 12 Feb, 2015 1 commit
  4. 09 Feb, 2015 1 commit
  5. 05 Feb, 2015 2 commits
    • Christoph Hellwig's avatar
      nfsd: pNFS block layout driver · 8650b8a0
      Christoph Hellwig authored
      Add a small shim between core nfsd and filesystems to translate the
      somewhat cumbersome pNFS data structures and semantics to something
      more palatable for Linux filesystems.
      
      Thanks to Rick McNeal for the old prototype pNFS blocklayout server
      code, which gave a lot of inspiration to this version even if no
      code is left from it.
      Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
      8650b8a0
    • Christoph Hellwig's avatar
      exportfs: add methods for block layout exports · 7fbc1067
      Christoph Hellwig authored
      Add three methods to allow exporting pnfs block layout volumes:
      
       - get_uuid: get a filesystem unique signature exposed to clients
       - map_blocks: map and if nessecary allocate blocks for a layout
       - commit_blocks: commit blocks in a layout once the client is done with them
      
      For now we stick the external pnfs block layout interfaces into s_export_op to
      avoid mixing them up with the internal interface between the NFS server and
      the layout drivers.  Once we've fully internalized the latter interface we
      can redecide if these methods should stay in s_export_ops.
      Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
      7fbc1067
  6. 02 Feb, 2015 13 commits
    • Christoph Hellwig's avatar
      nfsd: add trace events · 31ef83dc
      Christoph Hellwig authored
      For now just a few simple events to trace the layout stateid lifetime, but
      these already were enough to find several bugs in the Linux client layout
      stateid handling.
      Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
      31ef83dc
    • Christoph Hellwig's avatar
      18d1aef8
    • Christoph Hellwig's avatar
      nfsd: implement pNFS layout recalls · c5c707f9
      Christoph Hellwig authored
      Add support to issue layout recalls to clients.  For now we only support
      full-file recalls to get a simple and stable implementation.  This allows
      to embedd a nfsd4_callback structure in the layout_state and thus avoid
      any memory allocations under spinlocks during a recall.  For normal
      use cases that do not intent to share a single file between multiple
      clients this implementation is fully sufficient.
      
      To ensure layouts are recalled on local filesystem access each layout
      state registers a new FL_LAYOUT lease with the kernel file locking code,
      which filesystems that support pNFS exports that require recalls need
      to break on conflicting access patterns.
      
      The XDR code is based on the old pNFS server implementation by
      Andy Adamson, Benny Halevy, Boaz Harrosh, Dean Hildebrand, Fred Isaman,
      Marc Eshel, Mike Sager and Ricardo Labiaga.
      Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
      c5c707f9
    • Christoph Hellwig's avatar
      nfsd: implement pNFS operations · 9cf514cc
      Christoph Hellwig authored
      Add support for the GETDEVICEINFO, LAYOUTGET, LAYOUTCOMMIT and
      LAYOUTRETURN NFSv4.1 operations, as well as backing code to manage
      outstanding layouts and devices.
      
      Layout management is very straight forward, with a nfs4_layout_stateid
      structure that extends nfs4_stid to manage layout stateids as the
      top-level structure.  It is linked into the nfs4_file and nfs4_client
      structures like the other stateids, and contains a linked list of
      layouts that hang of the stateid.  The actual layout operations are
      implemented in layout drivers that are not part of this commit, but
      will be added later.
      
      The worst part of this commit is the management of the pNFS device IDs,
      which suffers from a specification that is not sanely implementable due
      to the fact that the device-IDs are global and not bound to an export,
      and have a small enough size so that we can't store the fsid portion of
      a file handle, and must never be reused.  As we still do need perform all
      export authentication and validation checks on a device ID passed to
      GETDEVICEINFO we are caught between a rock and a hard place.  To work
      around this issue we add a new hash that maps from a 64-bit integer to a
      fsid so that we can look up the export to authenticate against it,
      a 32-bit integer as a generation that we can bump when changing the device,
      and a currently unused 32-bit integer that could be used in the future
      to handle more than a single device per export.  Entries in this hash
      table are never deleted as we can't reuse the ids anyway, and would have
      a severe lifetime problem anyway as Linux export structures are temporary
      structures that can go away under load.
      
      Parts of the XDR data, structures and marshaling/unmarshaling code, as
      well as many concepts are derived from the old pNFS server implementation
      from Andy Adamson, Benny Halevy, Dean Hildebrand, Marc Eshel, Fred Isaman,
      Mike Sager, Ricardo Labiaga and many others.
      Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
      9cf514cc
    • Christoph Hellwig's avatar
    • Christoph Hellwig's avatar
    • Christoph Hellwig's avatar
    • Christoph Hellwig's avatar
      nfsd: add fh_fsid_match helper · 9558f250
      Christoph Hellwig authored
      Add a helper to check that the fsid parts of two file handles match.
      Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
      9558f250
    • Christoph Hellwig's avatar
      nfsd: move nfsd_fh_match to nfsfh.h · 4d94c2ef
      Christoph Hellwig authored
      The pnfs code will need it too.  Also remove the nfsd_ prefix to match the
      other filehandle helpers in that file.
      Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
      4d94c2ef
    • Christoph Hellwig's avatar
      fs: add FL_LAYOUT lease type · 11afe9f7
      Christoph Hellwig authored
      This (ab-)uses the file locking code to allow filesystems to recall
      outstanding pNFS layouts on a file.  This new lease type is similar but
      not quite the same as FL_DELEG.  A FL_LAYOUT lease can always be granted,
      an a per-filesystem lock (XFS iolock for the initial implementation)
      ensures not FL_LAYOUT leases granted when we would need to recall them.
      
      Also included are changes that allow multiple outstanding read
      leases of different types on the same file as long as they have a
      differnt owner.  This wasn't a problem until now as nfsd never set
      FL_LEASE leases, and no one else used FL_DELEG leases, but given that
      nfsd will also issues FL_LAYOUT leases we will have to handle it now.
      Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
      11afe9f7
    • Christoph Hellwig's avatar
      fs: track fl_owner for leases · 2ab99ee1
      Christoph Hellwig authored
      Just like for other lock types we should allow different owners to have
      a read lease on a file.  Currently this can't happen, but with the addition
      of pNFS layout leases we'll need this feature.
      Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
      2ab99ee1
    • Christoph Hellwig's avatar
      nfs: add LAYOUT_TYPE_MAX enum value · 6cae0a46
      Christoph Hellwig authored
      This gives us a nice upper bound for later use in nfѕd.
      Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
      6cae0a46
    • J. Bruce Fields's avatar
      Merge branch 'locks-3.20' of git://git.samba.org/jlayton/linux into for-3.20 · a584143b
      J. Bruce Fields authored
      Christoph's block pnfs patches have some minor dependencies on these
      lock patches.
      a584143b
  7. 23 Jan, 2015 3 commits
  8. 22 Jan, 2015 1 commit
  9. 16 Jan, 2015 17 commits