]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
apparmor: fix rawdata_f_data implicit flex array
authorJohn Johansen <john.johansen@canonical.com>
Sun, 1 Mar 2026 20:24:06 +0000 (12:24 -0800)
committerJohn Johansen <john.johansen@canonical.com>
Sun, 14 Jun 2026 03:14:07 +0000 (20:14 -0700)
rawdata_f_data has a blob of data that is allocated at its end but
not explicitly declared. Makes sure it is correctly declared as a
flex_rray.

Fixes: 63c16c3a76085 ("apparmor: Initial implementation of raw policy blob compression")
Reviewed-by: Georgia Garcia <georgia.garcia@canonical.com>
Signed-off-by: John Johansen <john.johansen@canonical.com>
security/apparmor/apparmorfs.c

index 252a7ca98a9e6a1f97a8d33971e59adca132cbf8..03fc18cf5fa7093aab031c31353599210fa35cdc 100644 (file)
 
 struct rawdata_f_data {
        struct aa_loaddata *loaddata;
+       DECLARE_FLEX_ARRAY(char, data);
 };
 
 #ifdef CONFIG_SECURITY_APPARMOR_EXPORT_BINARY
-#define RAWDATA_F_DATA_BUF(p) (char *)(p + 1)
 
 static void rawdata_f_data_free(struct rawdata_f_data *private)
 {
@@ -1436,7 +1436,7 @@ static ssize_t rawdata_read(struct file *file, char __user *buf, size_t size,
        struct rawdata_f_data *private = file->private_data;
 
        return simple_read_from_buffer(buf, size, ppos,
-                                      RAWDATA_F_DATA_BUF(private),
+                                      private->data,
                                       private->loaddata->size);
 }
 
@@ -1469,8 +1469,7 @@ static int rawdata_open(struct inode *inode, struct file *file)
        private->loaddata = loaddata;
 
        error = decompress_zstd(loaddata->data, loaddata->compressed_size,
-                               RAWDATA_F_DATA_BUF(private),
-                               loaddata->size);
+                               private->data, loaddata->size);
        if (error)
                goto fail_decompress;