• Chuck Lever's avatar
    NFS: Allow either strict or sloppy mount option parsing · f45663ce
    Chuck Lever authored
    The kernel's NFS client mount option parser currently doesn't allow
    unrecognized or incorrect mount options.  This prevents misspellings or
    incorrectly specified mount options from possibly causing silent data
    corruption.
    
    However, NFS mount options are not standardized, so different operating
    systems can use differently spelled mount options to support similar
    features, or can support mount options which no other operating system
    supports.
    
    "Sloppy" mount option parsing, which allows the parser to ignore any
    option it doesn't recognize, is needed to support automounters that often
    use maps that are shared between heterogenous operating systems.
    
    The legacy mount command ignores the validity of the values of mount
    options entirely, except for the "sec=" and "proto=" options.  If an
    incorrect value is specified, the out-of-range value is passed to the
    kernel; if a value is specified that contains non-numeric characters,
    it appears as though the legacy mount command sets that option to zero
    (probably incorrect behavior in general).
    
    In any case, this sets a precedent which we will partially follow for
    the kernel mount option parser:
    
    	+ if "sloppy" is not set, the parser will be strict about both
    	  unrecognized options (same as legacy) and invalid option
    	  values (stricter than legacy)
    
    	+ if "sloppy" is set, the parser will ignore unrecognized
    	  options and invalid option values (same as legacy)
    
    An "invalid" option value in this case means that either the type
    (integer, short, or string) or sign (for integer values) of the specified
    value is incorrect.
    
    This patch does two things: it changes the NFS client's mount option
    parsing loop so that it parses the whole string instead of failing at
    the first unrecognized option or invalid option value.  An unrecognized
    option or an invalid option value cause the option to be skipped.
    
    Then, the patch adds a "sloppy" mount option that allows the parsing
    to succeed anyway if there were any problems during parsing.  When
    parsing a set of options is complete, if there are errors and "sloppy"
    was specified, return success anyway.  Otherwise, only return success
    if there are no errors.
    Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
    Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
    f45663ce
super.c 63.1 KB