• D
    hw/9pfs: Fix errno value for xattr functions · 8af00205
    Daniel P. Berrange 提交于
    If there is no operation driver for the xattr type the
    functions return '-1' and set errno to '-EOPNOTSUPP'.
    When the calling code sets 'ret = -errno' this turns
    into a large positive number.
    
    In Linux 3.11, the kernel has switched to using 9p
    version 9p2000.L, instead of 9p2000.u, which enables
    support for xattr operations. This on its own is harmless,
    but for another change which makes it request the xattr
    with a name 'security.capability'.
    
    The result is that the guest sees a succesful return
    of 95 bytes of data, instead of a failure with errno
    set to 95. Since the kernel expects a maximum of 20
    bytes for an xattr return this gets translated to the
    unexpected errno ERANGE.
    
    This all means that when running a binary off a 9p fs
    in 3.11 kernels you get a fun result of:
    
      # ./date
      sh: ./date: Numerical result out of range
    
    The only workaround is to pass 'version=9p2000.u' when
    mounting the 9p fs in the guest, to disable all use of
    xattrs.
    Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
    Reviewed-by: NAneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
    Signed-off-by: NMichael Tokarev <mjt@tls.msk.ru>
    8af00205
virtio-9p-xattr.c 3.9 KB