)]}'
{
  "commit": "7124fe0a5b619d65b739477b3b55a20bf805b06d",
  "tree": "be333ebdcc7df735070dbc1441c1d59682d06132",
  "parents": [
    "7dce11dbac54fce777eea0f5fb25b2694ccd7900"
  ],
  "author": {
    "name": "Dave Chinner",
    "email": "dchinner@redhat.com",
    "time": "Thu Jun 24 11:15:33 2010 +1000"
  },
  "committer": {
    "name": "Dave Chinner",
    "email": "david@fromorbit.com",
    "time": "Thu Jun 24 11:15:33 2010 +1000"
  },
  "message": "xfs: validate untrusted inode numbers during lookup\n\nWhen we decode a handle or do a bulkstat lookup, we are using an\ninode number we cannot trust to be valid. If we are deleting inode\nchunks from disk (default noikeep mode), then we cannot trust the on\ndisk inode buffer for any given inode number to correctly reflect\nwhether the inode has been unlinked as the di_mode nor the\ngeneration number may have been updated on disk.\n\nThis is due to the fact that when we delete an inode chunk, we do\nnot write the clusters back to disk when they are removed - instead\nwe mark them stale to avoid them being written back potentially over\nthe top of something that has been subsequently allocated at that\nlocation. The result is that we can have locations of disk that look\nlike they contain valid inodes but in reality do not. Hence we\ncannot simply convert the inode number to a block number and read\nthe location from disk to determine if the inode is valid or not.\n\nAs a result, and XFS_IGET_BULKSTAT lookup needs to actually look the\ninode up in the inode allocation btree to determine if the inode\nnumber is valid or not.\n\nIt should be noted even on ikeep filesystems, there is the\npossibility that blocks on disk may look like valid inode clusters.\ne.g. if there are filesystem images hosted on the filesystem. Hence\neven for ikeep filesystems we really need to validate that the inode\nnumber is valid before issuing the inode buffer read.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "9d884c127bb980c9c24b934113be222a4fc1093d",
      "old_mode": 33188,
      "old_path": "fs/xfs/xfs_ialloc.c",
      "new_id": "0c946c8e05da40656b72aa94ce55120e21cf949e",
      "new_mode": 33188,
      "new_path": "fs/xfs/xfs_ialloc.c"
    }
  ]
}
