Uploaded image for project: 'Lustre'
  1. Lustre
  2. LU-8855

32 bit compat stat() syscalls expect device majors and minors to be less than 256

Details

    • Bug
    • Resolution: Fixed
    • Minor
    • Lustre 2.10.0
    • None
    • None
    • 3
    • 9223372036854775807

    Description

      A customer reported having problems accessing a file on Lustre with a 32-bit binary running on a 64-bit kernel:

      31583 access("infile_how", F_OK)        = 0
      31583 open("infile_how", O_RDWR)        = 3
      31583 fstat(3, 0xfff4d52c)              = -1 EOVERFLOW (Value too large for defined data type)
      31583 stat("infile_how", 0xfff4d51c)    = -1 EOVERFLOW (Value too large for defined data type)
      

      That fstat() doesn't return EOVERFLOW on the local file system:

      31823 access("infile_how", F_OK <unfinished ...>
      31824 fstat(0,  <unfinished ...>
      31823 <... access resumed> )            = 0
      31824 <... fstat resumed> {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
      31823 open("infile_how", O_RDWR <unfinished ...>
      31824 fstat(1,  <unfinished ...>
      31823 <... open resumed> )              = 3
      31824 <... fstat resumed> {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
      31823 fstat(3,  <unfinished ...>
      31824 fstat(2,  <unfinished ...>
      31823 <... fstat resumed> {st_mode=S_IFIFO, st_size=876682292077977496, ...}) = 0
      31824 <... fstat resumed> {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0
      31823 stat("infile_how", {st_mode=S_IFIFO, st_size=876682292077977496, ...}) = 0
      

      The values packed into stat->dev and stat->rdev by ll_getattr() are failing the old_valid_dev() checks in cp_compat_stat() from compat_sys_newfstat() and compat_sys_newstat().

      Attachments

        Activity

          [LU-8855] 32 bit compat stat() syscalls expect device majors and minors to be less than 256
          mdiep Minh Diep made changes -
          Link New: This issue is related to LDEV-243 [ LDEV-243 ]
          mdiep Minh Diep made changes -
          Link Original: This issue is related to LDEV-301 [ LDEV-301 ]
          mdiep Minh Diep made changes -
          Link New: This issue is related to LDEV-608 [ LDEV-608 ]
          mdiep Minh Diep made changes -
          Link New: This issue is related to LDEV-567 [ LDEV-567 ]
          pjones Peter Jones made changes -
          Fix Version/s New: Lustre 2.10.0 [ 12204 ]
          Resolution New: Fixed [ 1 ]
          Status Original: Open [ 1 ] New: Resolved [ 5 ]
          pjones Peter Jones made changes -
          Link New: This issue is related to JFC-17 [ JFC-17 ]
          pjones Peter Jones made changes -
          Link New: This issue is related to LDEV-301 [ LDEV-301 ]
          adilger Andreas Dilger made changes -
          Description New: A customer reported having problems accessing a file on Lustre with a 32-bit binary running on a 64-bit kernel:

          {noformat}
          31583 access("infile_how", F_OK) = 0
          31583 open("infile_how", O_RDWR) = 3
          31583 fstat(3, 0xfff4d52c) = -1 EOVERFLOW (Value too large for defined data type)
          31583 stat("infile_how", 0xfff4d51c) = -1 EOVERFLOW (Value too large for defined data type)
          {noformat}

          That {{fstat()}} doesn't return _EOVERFLOW_ on the local file system:

          {noformat}
          31823 access("infile_how", F_OK <unfinished ...>
          31824 fstat(0, <unfinished ...>
          31823 <... access resumed> ) = 0
          31824 <... fstat resumed> {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
          31823 open("infile_how", O_RDWR <unfinished ...>
          31824 fstat(1, <unfinished ...>
          31823 <... open resumed> ) = 3
          31824 <... fstat resumed> {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
          31823 fstat(3, <unfinished ...>
          31824 fstat(2, <unfinished ...>
          31823 <... fstat resumed> {st_mode=S_IFIFO, st_size=876682292077977496, ...}) = 0
          31824 <... fstat resumed> {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0
          31823 stat("infile_how", {st_mode=S_IFIFO, st_size=876682292077977496, ...}) = 0
          {noformat}

          The values packed into {{stat->dev}} and {{stat->rdev}} by {{ll_getattr()}} are failing the {{old_valid_dev()}} checks in {{cp_compat_stat()}} from {{compat_sys_newfstat()}} and {{compat_sys_newstat()}}.
          jhammond John Hammond made changes -
          Link New: This issue is related to ISBC-70 [ ISBC-70 ]
          jhammond John Hammond made changes -
          Assignee Original: WC Triage [ wc-triage ] New: John Hammond [ jhammond ]
          jhammond John Hammond created issue -

          People

            jhammond John Hammond
            jhammond John Hammond
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: