• C
    NFS: SETCLIENTID truncates client ID and netid · d1ce02e1
    Chuck Lever 提交于
    The sc_name field is currently 56 bytes long.  This is not large enough
    to hold a pair of IPv6 addresses, the authentication type, the protocol
    name, and a uniquifier number.  The maximum possible size of the name
    string using IPv6 addresses is just under 110 bytes, so I increased the
    size of the sc_name field to accomodate this maximum.
    
    In addition, the strings in the nfs4_setclientid structure are
    constructed with scnprintf(), which wants to terminate its output with
    '\0'.  The sc_netid field was large enough only for a three byte netid
    string and a '\0' so inet6 netids were being truncated.  Perhaps we
    don't need the overhead of scnprintf() to do a simple string copy, but
    I fixed this by increasing the size of the buffer by one byte.
    
    Since all three of the string buffers in nfs4_setclientid are
    constructed with scnprintf(), I increased the size of all three by one
    byte to document the requirement, although I don't think either the
    universal address field or the name field will be so small that these
    strings get truncated in this way.
    
    The size of the Linux client's client ID on the wire will be larger
    than before.  RFC 3530 suggests the size limit for client IDs is 1024,
    and we are still well below that.
    Signed-off-by: NChuck Lever <chuck.lever@oracle.com>
    Signed-off-by: NTrond Myklebust <Trond.Myklebust@netapp.com>
    d1ce02e1
nfs_xdr.h 19.2 KB