• Damien Le Moal's avatar
    zonefs: Detect append writes at invalid locations · a608da3b
    Damien Le Moal authored
    Using REQ_OP_ZONE_APPEND operations for synchronous writes to sequential
    files succeeds regardless of the zone write pointer position, as long as
    the target zone is not full. This means that if an external (buggy)
    application writes to the zone of a sequential file underneath the file
    system, subsequent file write() operation will succeed but the file size
    will not be correct and the file will contain invalid data written by
    another application.
    
    Modify zonefs_file_dio_append() to check the written sector of an append
    write (returned in bio->bi_iter.bi_sector) and return -EIO if there is a
    mismatch with the file zone wp offset field. This change triggers a call
    to zonefs_io_error() and a zone check. Modify zonefs_io_error_cb() to
    not expose the unexpected data after the current inode size when the
    errors=remount-ro mode is used. Other error modes are correctly handled
    already.
    
    Fixes: 02ef12a6 ("zonefs: use REQ_OP_ZONE_APPEND for sync DIO")
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarDamien Le Moal <damien.lemoal@opensource.wdc.com>
    Reviewed-by: default avatarJohannes Thumshirn <johannes.thumshirn@wdc.com>
    a608da3b
super.c 51.6 KB