12 Jul, 2013

1 commit

  • Pull nfsd changes from Bruce Fields:
    "Changes this time include:

    - 4.1 enabled on the server by default: the last 4.1-specific issues
    I know of are fixed, so we're not going to find the rest of the
    bugs without more exposure.
    - Experimental support for NFSv4.2 MAC Labeling (to allow running
    selinux over NFS), from Dave Quigley.
    - Fixes for some delicate cache/upcall races that could cause rare
    server hangs; thanks to Neil Brown and Bodo Stroesser for extreme
    debugging persistence.
    - Fixes for some bugs found at the recent NFS bakeathon, mostly v4
    and v4.1-specific, but also a generic bug handling fragmented rpc
    calls"

    * 'for-3.11' of git://linux-nfs.org/~bfields/linux: (31 commits)
    nfsd4: support minorversion 1 by default
    nfsd4: allow destroy_session over destroyed session
    svcrpc: fix failures to handle -1 uid's
    sunrpc: Don't schedule an upcall on a replaced cache entry.
    net/sunrpc: xpt_auth_cache should be ignored when expired.
    sunrpc/cache: ensure items removed from cache do not have pending upcalls.
    sunrpc/cache: use cache_fresh_unlocked consistently and correctly.
    sunrpc/cache: remove races with queuing an upcall.
    nfsd4: return delegation immediately if lease fails
    nfsd4: do not throw away 4.1 lock state on last unlock
    nfsd4: delegation-based open reclaims should bypass permissions
    svcrpc: don't error out on small tcp fragment
    svcrpc: fix handling of too-short rpc's
    nfsd4: minor read_buf cleanup
    nfsd4: fix decoding of compounds across page boundaries
    nfsd4: clean up nfs4_open_delegation
    NFSD: Don't give out read delegations on creates
    nfsd4: allow client to send no cb_sec flavors
    nfsd4: fail attempts to request gss on the backchannel
    nfsd4: implement minimal SP4_MACH_CRED
    ...

    Linus Torvalds
     

10 Jul, 2013

1 commit

  • Pull NFS client updates from Trond Myklebust:
    "Feature highlights include:
    - Add basic client support for NFSv4.2
    - Add basic client support for Labeled NFS (selinux for NFSv4.2)
    - Fix the use of credentials in NFSv4.1 stateful operations, and add
    support for NFSv4.1 state protection.

    Bugfix highlights:
    - Fix another NFSv4 open state recovery race
    - Fix an NFSv4.1 back channel session regression
    - Various rpc_pipefs races
    - Fix another issue with NFSv3 auth negotiation

    Please note that Labeled NFS does require some additional support from
    the security subsystem. The relevant changesets have all been
    reviewed and acked by James Morris."

    * tag 'nfs-for-3.11-1' of git://git.linux-nfs.org/projects/trondmy/linux-nfs: (54 commits)
    NFS: Set NFS_CS_MIGRATION for NFSv4 mounts
    NFSv4.1 Refactor nfs4_init_session and nfs4_init_channel_attrs
    nfs: have NFSv3 try server-specified auth flavors in turn
    nfs: have nfs_mount fake up a auth_flavs list when the server didn't provide it
    nfs: move server_authlist into nfs_try_mount_request
    nfs: refactor "need_mount" code out of nfs_try_mount
    SUNRPC: PipeFS MOUNT notification optimization for dying clients
    SUNRPC: split client creation routine into setup and registration
    SUNRPC: fix races on PipeFS UMOUNT notifications
    SUNRPC: fix races on PipeFS MOUNT notifications
    NFSv4.1 use pnfs_device maxcount for the objectlayout gdia_maxcount
    NFSv4.1 use pnfs_device maxcount for the blocklayout gdia_maxcount
    NFSv4.1 Fix gdia_maxcount calculation to fit in ca_maxresponsesize
    NFS: Improve legacy idmapping fallback
    NFSv4.1 end back channel session draining
    NFS: Apply v4.1 capabilities to v4.2
    NFSv4.1: Clean up layout segment comparison helper names
    NFSv4.1: layout segment comparison helpers should take 'const' parameters
    NFSv4: Move the DNS resolver into the NFSv4 module
    rpc_pipefs: only set rpc_dentry_ops if d_op isn't already set
    ...

    Linus Torvalds
     

09 Jul, 2013

2 commits

  • We now have minimal minorversion 1 support; turn it on by default.

    This can still be turned off with "echo -4.1 >/proc/fs/nfsd/versions".

    Signed-off-by: J. Bruce Fields

    J. Bruce Fields
     
  • RFC 5661 allows a client to destroy a session using a compound
    associated with the destroyed session, as long as the DESTROY_SESSION op
    is the last op of the compound.

    We attempt to allow this, but testing against a Solaris client (which
    does destroy sessions in this way) showed that we were failing the
    DESTROY_SESSION with NFS4ERR_DELAY, because we assumed the reference
    count on the session (held by us) represented another rpc in progress
    over this session.

    Fix this by noting that in this case the expected reference count is 1,
    not 0.

    Also, note as long as the session holds a reference to the compound
    we're destroying, we can't free it here--instead, delay the free till
    the final put in nfs4svc_encode_compoundres.

    Signed-off-by: J. Bruce Fields

    J. Bruce Fields
     

02 Jul, 2013

11 commits

  • This case shouldn't happen--the administrator shouldn't really allow
    other applications access to the export until clients have had the
    chance to reclaim their state--but if it does then we should set the
    "return this lease immediately" bit on the reply. That still leaves
    some small races, but it's the best the protocol allows us to do in the
    case a lease is ripped out from under us....

    Signed-off-by: J. Bruce Fields

    J. Bruce Fields
     
  • This reverts commit eb2099f31b0f090684a64ef8df44a30ff7c45fc2 "nfsd4:
    release lockowners on last unlock in 4.1 case". Trond identified
    language in rfc 5661 section 8.2.4 which forbids this behavior:

    Stateids associated with byte-range locks are an exception.
    They remain valid even if a LOCKU frees all remaining locks, so
    long as the open file with which they are associated remains
    open, unless the client frees the stateids via the FREE_STATEID
    operation.

    And bakeathon 2013 testing found a 4.1 freebsd client was getting an
    incorrect BAD_STATEID return from a FREE_STATEID in the above situation
    and then failing.

    The spec language honestly was probably a mistake but at this point with
    implementations already following it we're probably stuck with that.

    Signed-off-by: J. Bruce Fields

    J. Bruce Fields
     
  • We saw a v4.0 client's create fail as follows:

    - open create succeeds and gets a read delegation
    - client attempts to set mode on new file, gets DELAY while
    server recalls delegation.
    - client attempts a CLAIM_DELEGATE_CUR open using the
    delegation, gets error because of new file mode.

    This probably can't happen on a recent kernel since we're no longer
    giving out delegations on create opens. Nevertheless, it's a
    bug--reclaim opens should bypass permission checks.

    Reported-by: Steve Dickson
    Reported-by: Trond Myklebust
    Signed-off-by: J. Bruce Fields

    J. Bruce Fields
     
  • The code to step to the next page seems reasonably self-contained.

    Signed-off-by: J. Bruce Fields

    J. Bruce Fields
     
  • A freebsd NFSv4.0 client was getting rare IO errors expanding a tarball.
    A network trace showed the server returning BAD_XDR on the final getattr
    of a getattr+write+getattr compound. The final getattr started on a
    page boundary.

    I believe the Linux client ignores errors on the post-write getattr, and
    that that's why we haven't seen this before.

    Cc: stable@vger.kernel.org
    Reported-by: Rick Macklem
    Signed-off-by: J. Bruce Fields

    J. Bruce Fields
     
  • The nfs4_open_delegation logic is unecessarily baroque.

    Also stop pretending we support write delegations in several places.

    Some day we will support write delegations, but when that happens adding
    back in these flag parameters will be the easy part. For now they're
    just confusing.

    Signed-off-by: J. Bruce Fields

    J. Bruce Fields
     
  • When an exclusive create is done with the mode bits
    set (aka open(testfile, O_CREAT | O_EXCL, 0777)) this
    causes a OPEN op followed by a SETATTR op. When a
    read delegation is given in the OPEN, it causes
    the SETATTR to delay with EAGAIN until the
    delegation is recalled.

    This patch caused exclusive creates to give out
    a write delegation (which turn into no delegation)
    which allows the SETATTR seamlessly succeed.

    Signed-off-by: Steve Dickson
    [bfields: do this for any CREATE, not just exclusive; comment]
    Signed-off-by: J. Bruce Fields

    Steve Dickson
     
  • In testing I notice that some of the pynfs tests forget to send any
    cb_sec flavors, and that we haven't necessarily errored out in that case
    before.

    I'll fix pynfs, but am also inclined to default to trying AUTH_NONE in
    that case in case this is something clients actually do.

    Signed-off-by: J. Bruce Fields

    J. Bruce Fields
     
  • We don't support gss on the backchannel. We should state that fact up
    front rather than just letting things continue and later making the
    client try to figure out why the backchannel isn't working.

    Trond suggested instead returning NFS4ERR_NOENT. I think it would be
    tricky for the client to distinguish between the case "I don't support
    gss on the backchannel" and "I can't find that in my cache, please
    create another context and try that instead", and I'd prefer something
    that currently doesn't have any other meaning for this operation, hence
    the (somewhat arbitrary) NFS4ERR_ENCR_ALG_UNSUPP.

    Signed-off-by: J. Bruce Fields

    J. Bruce Fields
     
  • Do a minimal SP4_MACH_CRED implementation suggested by Trond, ignoring
    the client-provided spo_must_* arrays and just enforcing credential
    checks for the minimum required operations.

    Signed-off-by: J. Bruce Fields

    J. Bruce Fields
     
  • Store a pointer to the gss mechanism used in the rq_cred and cl_cred.
    This will make it easier to enforce SP4_MACH_CRED, which needs to
    compare the mechanism used on the exchange_id with that used on
    protected operations.

    Signed-off-by: J. Bruce Fields

    J. Bruce Fields
     

29 Jun, 2013

4 commits

  • Having a global lock that protects all of this code is a clear
    scalability problem. Instead of doing that, move most of the code to be
    protected by the i_lock instead. The exceptions are the global lists
    that the ->fl_link sits on, and the ->fl_block list.

    ->fl_link is what connects these structures to the
    global lists, so we must ensure that we hold those locks when iterating
    over or updating these lists.

    Furthermore, sound deadlock detection requires that we hold the
    blocked_list state steady while checking for loops. We also must ensure
    that the search and update to the list are atomic.

    For the checking and insertion side of the blocked_list, push the
    acquisition of the global lock into __posix_lock_file and ensure that
    checking and update of the blocked_list is done without dropping the
    lock in between.

    On the removal side, when waking up blocked lock waiters, take the
    global lock before walking the blocked list and dequeue the waiters from
    the global list prior to removal from the fl_block list.

    With this, deadlock detection should be race free while we minimize
    excessive file_lock_lock thrashing.

    Finally, in order to avoid a lock inversion problem when handling
    /proc/locks output we must ensure that manipulations of the fl_block
    list are also protected by the file_lock_lock.

    Signed-off-by: Jeff Layton
    Signed-off-by: Al Viro

    Jeff Layton
     
  • Signed-off-by: Al Viro

    Al Viro
     
  • New method - ->iterate(file, ctx). That's the replacement for ->readdir();
    it takes callback from ctx->actor, uses ctx->pos instead of file->f_pos and
    calls dir_emit(ctx, ...) instead of filldir(data, ...). It does *not*
    update file->f_pos (or look at it, for that matter); iterate_dir() does the
    update.

    Note that dir_emit() takes the offset from ctx->pos (and eventually
    filldir_t will lose that argument).

    Signed-off-by: Al Viro

    Al Viro
     
  • iterate_dir(): new helper, replacing vfs_readdir().

    struct dir_context: contains the readdir callback (and will get more stuff
    in it), embedded into whatever data that callback wants to deal with;
    eventually, we'll be passing it to ->readdir() replacement instead of
    (data,filldir) pair.

    Signed-off-by: Al Viro

    Al Viro
     

21 May, 2013

1 commit

  • In C, signed integer overflow results in undefined behavior, but unsigned
    overflow wraps around. So do the subtraction first, then cast to signed.

    Reported-by: Joakim Tjernlund
    Signed-off-by: Jim Rees
    Signed-off-by: J. Bruce Fields

    Jim Rees
     

15 May, 2013

2 commits


13 May, 2013

4 commits

  • This enables NFSv4.2 support for the server. To enable this
    code do the following:
    echo "+4.2" >/proc/fs/nfsd/versions

    after the nfsd kernel module is loaded.

    On its own this does nothing except allow the server to respond to
    compounds with minorversion set to 2. All the new NFSv4.2 features are
    optional, so this is perfectly legal.

    Signed-off-by: Steve Dickson
    Signed-off-by: J. Bruce Fields

    Steve Dickson
     
  • This code assumes that any client using exchange_id is using NFSv4.1,
    but with the introduction of 4.2 that will no longer true.

    This main effect of this is that client callbacks will use the same
    minorversion as that used on the exchange_id.

    Note that clients are forbidden from mixing 4.1 and 4.2 compounds. (See
    rfc 5661, section 2.7, #13: "A client MUST NOT attempt to use a stateid,
    filehandle, or similar returned object from the COMPOUND procedure with
    minor version X for another COMPOUND procedure with minor version Y,
    where X != Y.") However, we do not currently attempt to enforce this
    except in the case of mixing zero minor version with non-zero minor
    versions.

    Signed-off-by: J. Bruce Fields

    J. Bruce Fields
     
  • The fh_lock_parent(), nfsd_truncate(), nfsd_notify_change() and
    nfsd_sync_dir() fuctions are neither implemented nor used, just remove
    them.

    Signed-off-by: Zhao Hongjiang
    Signed-off-by: J. Bruce Fields

    Zhao Hongjiang
     
  • Signed-off-by: Matthew N. Dodd
    Signed-off-by: Miguel Rodel Felipe
    Signed-off-by: Phua Eu Gene
    Signed-off-by: Khin Mi Mi Aung
    Signed-off-by: Steve Dickson
    Signed-off-by: J. Bruce Fields

    Steve Dickson
     

11 May, 2013

1 commit

  • Pull nfsd fixes from Bruce Fields:
    "Small fixes for two bugs and two warnings"

    * 'for-3.10' of git://linux-nfs.org/~bfields/linux:
    nfsd: fix oops when legacy_recdir_name_error is passed a -ENOENT error
    SUNRPC: fix decoding of optional gss-proxy xdr fields
    SUNRPC: Refactor gssx_dec_option_array() to kill uninitialized warning
    nfsd4: don't allow owner override on 4.1 CLAIM_FH opens

    Linus Torvalds
     

10 May, 2013

1 commit

  • Toralf reported the following oops to the linux-nfs mailing list:

    -----------------[snip]------------------
    NFSD: unable to generate recoverydir name (-2).
    NFSD: disabling legacy clientid tracking. Reboot recovery will not function correctly!
    BUG: unable to handle kernel NULL pointer dereference at 000003c8
    IP: [] nfsd4_client_tracking_exit+0x11/0x50 [nfsd]
    *pdpt = 000000002ba33001 *pde = 0000000000000000
    Oops: 0000 [#1] SMP
    Modules linked in: loop nfsd auth_rpcgss ipt_MASQUERADE xt_owner xt_multiport ipt_REJECT xt_tcpudp xt_recent xt_conntrack nf_conntrack_ftp xt_limit xt_LOG iptable_nat nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat_ipv4 nf_nat nf_conntrack iptable_filter ip_tables x_tables af_packet pppoe pppox ppp_generic slhc bridge stp llc tun arc4 iwldvm mac80211 coretemp kvm_intel uvcvideo sdhci_pci sdhci mmc_core videobuf2_vmalloc videobuf2_memops usblp videobuf2_core i915 iwlwifi psmouse videodev cfg80211 kvm fbcon bitblit cfbfillrect acpi_cpufreq mperf evdev softcursor font cfbimgblt i2c_algo_bit cfbcopyarea intel_agp intel_gtt drm_kms_helper snd_hda_codec_conexant drm agpgart fb fbdev tpm_tis thinkpad_acpi tpm nvram e1000e rfkill thermal ptp wmi pps_core tpm_bios 8250_pci processor 8250 ac snd_hda_intel snd_hda_codec snd_pcm battery video i2c_i801 snd_page_alloc snd_timer button serial_core i2c_core snd soundcore thermal_sys hwmon aesni_intel ablk_helper cryp
    td lrw aes_i586 xts gf128mul cbc fuse nfs lockd sunrpc dm_crypt dm_mod hid_monterey hid_microsoft hid_logitech hid_ezkey hid_cypress hid_chicony hid_cherry hid_belkin hid_apple hid_a4tech hid_generic usbhid hid sr_mod cdrom sg [last unloaded: microcode]
    Pid: 6374, comm: nfsd Not tainted 3.9.1 #6 LENOVO 4180F65/4180F65
    EIP: 0060:[] EFLAGS: 00010202 CPU: 0
    EIP is at nfsd4_client_tracking_exit+0x11/0x50 [nfsd]
    EAX: 00000000 EBX: fffffffe ECX: 00000007 EDX: 00000007
    ESI: eb9dcb00 EDI: eb2991c0 EBP: eb2bde38 ESP: eb2bde34
    DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068
    CR0: 80050033 CR2: 000003c8 CR3: 2ba80000 CR4: 000407f0
    DR0: 00000000 DR1: 00000000 DR2: 00000000 DR3: 00000000
    DR6: ffff0ff0 DR7: 00000400
    Process nfsd (pid: 6374, ti=eb2bc000 task=eb2711c0 task.ti=eb2bc000)
    Stack:
    fffffffe eb2bde4c f90a3e0c f90a7754 fffffffe eb0a9c00 eb2bdea0 f90a41ed
    eb2991c0 1b270000 eb2991c0 eb2bde7c f9099ce9 eb2bde98 0129a020 eb29a020
    eb2bdecc eb2991c0 eb2bdea8 f9099da5 00000000 eb9dcb00 00000001 67822f08
    Call Trace:
    [] legacy_recdir_name_error+0x3c/0x40 [nfsd]
    [] nfsd4_create_clid_dir+0x15d/0x1c0 [nfsd]
    [] ? nfsd4_lookup_stateid+0x99/0xd0 [nfsd]
    [] ? nfs4_preprocess_seqid_op+0x85/0x100 [nfsd]
    [] nfsd4_client_record_create+0x37/0x50 [nfsd]
    [] nfsd4_open_confirm+0xfe/0x130 [nfsd]
    [] ? nfsd4_encode_operation+0x61/0x90 [nfsd]
    [] ? nfsd4_free_stateid+0xc0/0xc0 [nfsd]
    [] nfsd4_proc_compound+0x41b/0x530 [nfsd]
    [] nfsd_dispatch+0x8b/0x1a0 [nfsd]
    [] svc_process+0x3dd/0x640 [sunrpc]
    [] nfsd+0xad/0x110 [nfsd]
    [] ? nfsd_destroy+0x70/0x70 [nfsd]
    [] kthread+0x94/0xa0
    [] ret_from_kernel_thread+0x1b/0x28
    [] ? flush_kthread_work+0xd0/0xd0
    Code: 86 b0 00 00 00 90 c5 0a f9 c7 04 24 70 76 0a f9 e8 74 a9 3d c8 eb ba 8d 76 00 55 89 e5 53 66 66 66 66 90 8b 15 68 c7 0a f9 85 d2 88 c8 03 00 00 74 2c 3b 11 77 28 8b 5c 91 08 85 db 74 22 8b
    EIP: [] nfsd4_client_tracking_exit+0x11/0x50 [nfsd] SS:ESP 0068:eb2bde34
    CR2: 00000000000003c8
    ---[ end trace 09e54015d145c9c6 ]---

    The problem appears to be a regression that was introduced in commit
    9a9c6478 "nfsd: make NFSv4 recovery client tracking options per net".
    Prior to that commit, it was safe to pass a NULL net pointer to
    nfsd4_client_tracking_exit in the legacy recdir case, and
    legacy_recdir_name_error did so. After that comit, the net pointer must
    be valid.

    This patch just fixes legacy_recdir_name_error to pass in a valid net
    pointer to that function.

    Cc: # v3.8+
    Cc: Stanislav Kinsbursky
    Reported-and-tested-by: Toralf Förster
    Signed-off-by: Jeff Layton
    Signed-off-by: J. Bruce Fields

    Jeff Layton
     

04 May, 2013

2 commits

  • The Linux client is using CLAIM_FH to implement regular opens, not just
    recovery cases, so it depends on the server to check permissions
    correctly.

    Therefore the owner override, which may make sense in the delegation
    recovery case, isn't right in the CLAIM_FH case.

    Symptoms: on a client with 49f9a0fafd844c32f2abada047c0b9a5ba0d6255
    "NFSv4.1: Enable open-by-filehandle", Bryan noticed this:

    touch test.txt
    chmod 000 test.txt
    echo test > test.txt

    succeeding.

    Cc: stable@kernel.org
    Reported-by: Bryan Schumaker
    Signed-off-by: J. Bruce Fields

    J. Bruce Fields
     
  • Pull nfsd changes from J Bruce Fields:
    "Highlights include:

    - Some more DRC cleanup and performance work from Jeff Layton

    - A gss-proxy upcall from Simo Sorce: currently krb5 mounts to the
    server using credentials from Active Directory often fail due to
    limitations of the svcgssd upcall interface. This replacement
    lifts those limitations. The existing upcall is still supported
    for backwards compatibility.

    - More NFSv4.1 support: at this point, if a user with a current
    client who upgrades from 4.0 to 4.1 should see no regressions. In
    theory we do everything a 4.1 server is required to do. Patches
    for a couple minor exceptions are ready for 3.11, and with those
    and some more testing I'd like to turn 4.1 on by default in 3.11."

    Fix up semantic conflict as per Stephen Rothwell and linux-next:

    Commit 030d794bf498 ("SUNRPC: Use gssproxy upcall for server RPCGSS
    authentication") adds two new users of "PDE(inode)->data", but we're
    supposed to use "PDE_DATA(inode)" instead since commit d9dda78bad87
    ("procfs: new helper - PDE_DATA(inode)").

    The old PDE() macro is no longer available since commit c30480b92cf4
    ("proc: Make the PROC_I() and PDE() macros internal to procfs")

    * 'for-3.10' of git://linux-nfs.org/~bfields/linux: (60 commits)
    NFSD: SECINFO doesn't handle unsupported pseudoflavors correctly
    NFSD: Simplify GSS flavor encoding in nfsd4_do_encode_secinfo()
    nfsd: make symbol nfsd_reply_cache_shrinker static
    svcauth_gss: fix error return code in rsc_parse()
    nfsd4: don't remap EISDIR errors in rename
    svcrpc: fix gss-proxy to respect user namespaces
    SUNRPC: gssp_procedures[] can be static
    SUNRPC: define {create,destroy}_use_gss_proxy_proc_entry in !PROC case
    nfsd4: better error return to indicate SSV non-support
    nfsd: fix EXDEV checking in rename
    SUNRPC: Use gssproxy upcall for server RPCGSS authentication.
    SUNRPC: Add RPC based upcall mechanism for RPCGSS auth
    SUNRPC: conditionally return endtime from import_sec_context
    SUNRPC: allow disabling idle timeout
    SUNRPC: attempt AF_LOCAL connect on setup
    nfsd: Decode and send 64bit time values
    nfsd4: put_client_renew_locked can be static
    nfsd4: remove unused macro
    nfsd4: remove some useless code
    nfsd4: implement SEQ4_STATUS_RECALLABLE_STATE_REVOKED
    ...

    Linus Torvalds
     

02 May, 2013

1 commit

  • Pull VFS updates from Al Viro,

    Misc cleanups all over the place, mainly wrt /proc interfaces (switch
    create_proc_entry to proc_create(), get rid of the deprecated
    create_proc_read_entry() in favor of using proc_create_data() and
    seq_file etc).

    7kloc removed.

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: (204 commits)
    don't bother with deferred freeing of fdtables
    proc: Move non-public stuff from linux/proc_fs.h to fs/proc/internal.h
    proc: Make the PROC_I() and PDE() macros internal to procfs
    proc: Supply a function to remove a proc entry by PDE
    take cgroup_open() and cpuset_open() to fs/proc/base.c
    ppc: Clean up scanlog
    ppc: Clean up rtas_flash driver somewhat
    hostap: proc: Use remove_proc_subtree()
    drm: proc: Use remove_proc_subtree()
    drm: proc: Use minor->index to label things, not PDE->name
    drm: Constify drm_proc_list[]
    zoran: Don't print proc_dir_entry data in debug
    reiserfs: Don't access the proc_dir_entry in r_open(), r_start() r_show()
    proc: Supply an accessor for getting the data from a PDE's parent
    airo: Use remove_proc_subtree()
    rtl8192u: Don't need to save device proc dir PDE
    rtl8187se: Use a dir under /proc/net/r8180/
    proc: Add proc_mkdir_data()
    proc: Move some bits from linux/proc_fs.h to linux/{of.h,signal.h,tty.h}
    proc: Move PDE_NET() to fs/proc/proc_net.c
    ...

    Linus Torvalds
     

01 May, 2013

5 commits

  • If nfsd4_do_encode_secinfo() can't find GSS info that matches an
    export security flavor, it assumes the flavor is not a GSS
    pseudoflavor, and simply puts it on the wire.

    However, if this XDR encoding logic is given a legitimate GSS
    pseudoflavor but the RPC layer says it does not support that
    pseudoflavor for some reason, then the server leaks GSS pseudoflavor
    numbers onto the wire.

    I confirmed this happens by blacklisting rpcsec_gss_krb5, then
    attempted a client transition from the pseudo-fs to a Kerberos-only
    share. The client received a flavor list containing the Kerberos
    pseudoflavor numbers, rather than GSS tuples.

    The encoder logic can check that each pseudoflavor in flavs[] is
    less than MAXFLAVOR before writing it into the buffer, to prevent
    this. But after "nflavs" is written into the XDR buffer, the
    encoder can't skip writing flavor information into the buffer when
    it discovers the RPC layer doesn't support that flavor.

    So count the number of valid flavors as they are written into the
    XDR buffer, then write that count into a placeholder in the XDR
    buffer when all recognized flavors have been encoded.

    Signed-off-by: Chuck Lever
    Signed-off-by: J. Bruce Fields

    Chuck Lever
     
  • Clean up.

    Signed-off-by: Chuck Lever
    Signed-off-by: J. Bruce Fields

    Chuck Lever
     
  • symbol 'nfsd_reply_cache_shrinker' only used within this file. It should
    be static.

    Signed-off-by: Wei Yongjun
    Signed-off-by: J. Bruce Fields

    Wei Yongjun
     
  • We're going out of our way here to remap an error to make rfc 3530
    happy--but the rfc itself (nor rfc 1813, which has similar language)
    gives no justification. And disagrees with local filesystem behavior,
    with Linux and posix man pages, and knfsd's implemented behavior for v2
    and v3.

    And the documented behavior seems better, in that it gives a little more
    information--you could implement the 3530 behavior using the posix
    behavior, but not the other way around.

    Also, the Linux client makes no attempt to remap this error in the v4
    case, so it can end up just returning EEXIST to the application in a
    case where it should return EISDIR.

    So honestly I think the rfc's are just buggy here--or in any case it
    doesn't see worth the trouble to remap this error.

    Reported-by: Frank S Filz
    Signed-off-by: J. Bruce Fields

    J. Bruce Fields
     
  • Pull NFS client bugfixes and cleanups from Trond Myklebust:

    - NLM: stable fix for NFSv2/v3 blocking locks

    - NFSv4.x: stable fixes for the delegation recall error handling code

    - NFSv4.x: Security flavour negotiation fixes and cleanups by Chuck
    Lever

    - SUNRPC: A number of RPCSEC_GSS fixes and cleanups also from Chuck

    - NFSv4.x assorted state management and reboot recovery bugfixes

    - NFSv4.1: In cases where we have already looked up a file, and hold a
    valid filehandle, use the new open-by-filehandle operation instead of
    opening by name.

    - Allow the NFSv4.1 callback thread to freeze

    - NFSv4.x: ensure that file unlock waits for readahead to complete

    - NFSv4.1: ensure that the RPC layer doesn't override the NFS session
    table size negotiation by limiting the number of slots.

    - NFSv4.x: Fix SETATTR spec compatibility issues

    * tag 'nfs-for-3.10-1' of git://git.linux-nfs.org/projects/trondmy/linux-nfs: (67 commits)
    NFSv4: Warn once about servers that incorrectly apply open mode to setattr
    NFSv4: Servers should only check SETATTR stateid open mode on size change
    NFSv4: Don't recheck permissions on open in case of recovery cached open
    NFSv4.1: Don't do a delegated open for NFS4_OPEN_CLAIM_DELEG_CUR_FH modes
    NFSv4.1: Use the more efficient open_noattr call for open-by-filehandle
    NFS: Retry SETCLIENTID with AUTH_SYS instead of AUTH_NONE
    NFSv4: Ensure that we clear the NFS_OPEN_STATE flag when appropriate
    LOCKD: Ensure that nlmclnt_block resets block->b_status after a server reboot
    NFSv4: Ensure the LOCK call cannot use the delegation stateid
    NFSv4: Use the open stateid if the delegation has the wrong mode
    nfs: Send atime and mtime as a 64bit value
    NFSv4: Record the OPEN create mode used in the nfs4_opendata structure
    NFSv4.1: Set the RPC_CLNT_CREATE_INFINITE_SLOTS flag for NFSv4.1 transports
    SUNRPC: Allow rpc_create() to request that TCP slots be unlimited
    SUNRPC: Fix a livelock problem in the xprt->backlog queue
    NFSv4: Fix handling of revoked delegations by setattr
    NFSv4 release the sequence id in the return on close case
    nfs: remove unnecessary check for NULL inode->i_flock from nfs_delegation_claim_locks
    NFS: Ensure that NFS file unlock waits for readahead to complete
    NFS: Add functionality to allow waiting on all outstanding reads to complete
    ...

    Linus Torvalds
     

30 Apr, 2013

2 commits


27 Apr, 2013

2 commits

  • As 4.1 becomes less experimental and SSV still isn't implemented, we
    have to admit it's not going to be, and return some sensible error
    rather than just saying "our server's broken". Discussion in the ietf
    group hasn't turned up any objections to using NFS4ERR_ENC_ALG_UNSUPP
    for that purpose.

    Signed-off-by: J. Bruce Fields

    J. Bruce Fields
     
  • We again check for the EXDEV a little later on, so the first check is
    redundant. This check is also slightly racier, since a badly timed
    eviction from the export cache could leave us with the two fh_export
    pointers pointing to two different cache entries which each refer to the
    same underlying export.

    It's better to compare vfsmounts as the later check does, but that
    leaves a minor security hole in the case where the two exports refer to
    two different directories especially if (for example) they have
    different root-squashing options.

    So, compare ex_path.dentry too.

    Reported-by: Joe Habermann
    Signed-off-by: J. Bruce Fields

    J. Bruce Fields