Merge tag 'mm-stable-2022-10-13' of git://git.kernel.org/pub/scm/linux/kernel/git...
[linux-2.6-block.git] / fs / f2fs / verity.c
index c0733f867074684a1b0c62743447a70bd2c03dd4..c352fff88a5e65e65dbb37f77201197c84161767 100644 (file)
@@ -47,16 +47,13 @@ static int pagecache_read(struct inode *inode, void *buf, size_t count,
                size_t n = min_t(size_t, count,
                                 PAGE_SIZE - offset_in_page(pos));
                struct page *page;
-               void *addr;
 
                page = read_mapping_page(inode->i_mapping, pos >> PAGE_SHIFT,
                                         NULL);
                if (IS_ERR(page))
                        return PTR_ERR(page);
 
-               addr = kmap_atomic(page);
-               memcpy(buf, addr + offset_in_page(pos), n);
-               kunmap_atomic(addr);
+               memcpy_from_page(buf, page, offset_in_page(pos), n);
 
                put_page(page);
 
@@ -85,16 +82,13 @@ static int pagecache_write(struct inode *inode, const void *buf, size_t count,
                                 PAGE_SIZE - offset_in_page(pos));
                struct page *page;
                void *fsdata;
-               void *addr;
                int res;
 
                res = aops->write_begin(NULL, mapping, pos, n, &page, &fsdata);
                if (res)
                        return res;
 
-               addr = kmap_atomic(page);
-               memcpy(addr + offset_in_page(pos), buf, n);
-               kunmap_atomic(addr);
+               memcpy_to_page(page, offset_in_page(pos), buf, n);
 
                res = aops->write_end(NULL, mapping, pos, n, n, page, fsdata);
                if (res < 0)
@@ -246,6 +240,8 @@ static int f2fs_get_verity_descriptor(struct inode *inode, void *buf,
        if (pos + size < pos || pos + size > inode->i_sb->s_maxbytes ||
            pos < f2fs_verity_metadata_pos(inode) || size > INT_MAX) {
                f2fs_warn(F2FS_I_SB(inode), "invalid verity xattr");
+               f2fs_handle_error(F2FS_I_SB(inode),
+                               ERROR_CORRUPTED_VERITY_XATTR);
                return -EFSCORRUPTED;
        }
        if (buf_size) {