Skip to content

Commit

Permalink
fs: Replace zero-length array with flexible-array member
Browse files Browse the repository at this point in the history
There is a regular need in the kernel to provide a way to declare having a
dynamically sized set of trailing elements in a structure. Kernel code should
always use “flexible array members”[1] for these cases. The older style of
one-element or zero-length arrays should no longer be used[2].

[1] https://en.wikipedia.org/wiki/Flexible_array_member
[2] https://www.kernel.org/doc/html/v5.9-rc1/process/deprecated.html#zero-length-and-one-element-arrays

Signed-off-by: Gustavo A. R. Silva <[email protected]>
  • Loading branch information
GustavoARSilva committed Oct 29, 2020
1 parent b08eadd commit 5e01fdf
Show file tree
Hide file tree
Showing 6 changed files with 10 additions and 10 deletions.
2 changes: 1 addition & 1 deletion fs/binfmt_elf.c
Original file line number Diff line number Diff line change
Expand Up @@ -1690,7 +1690,7 @@ struct elf_thread_core_info {
struct elf_thread_core_info *next;
struct task_struct *task;
struct elf_prstatus prstatus;
struct memelfnote notes[0];
struct memelfnote notes[];
};

struct elf_note_info {
Expand Down
2 changes: 1 addition & 1 deletion fs/hfs/btree.h
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ struct hfs_bnode {
wait_queue_head_t lock_wq;
atomic_t refcnt;
unsigned int page_offset;
struct page *page[0];
struct page *page[];
};

#define HFS_BNODE_ERROR 0
Expand Down
2 changes: 1 addition & 1 deletion fs/hfsplus/hfsplus_fs.h
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ struct hfs_bnode {
wait_queue_head_t lock_wq;
atomic_t refcnt;
unsigned int page_offset;
struct page *page[0];
struct page *page[];
};

#define HFS_BNODE_LOCK 0
Expand Down
8 changes: 4 additions & 4 deletions fs/isofs/rock.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ struct SU_ER_s {
__u8 len_des;
__u8 len_src;
__u8 ext_ver;
__u8 data[0];
__u8 data[];
} __attribute__ ((packed));

struct RR_RR_s {
Expand All @@ -44,7 +44,7 @@ struct RR_PN_s {
struct SL_component {
__u8 flags;
__u8 len;
__u8 text[0];
__u8 text[];
} __attribute__ ((packed));

struct RR_SL_s {
Expand All @@ -54,7 +54,7 @@ struct RR_SL_s {

struct RR_NM_s {
__u8 flags;
char name[0];
char name[];
} __attribute__ ((packed));

struct RR_CL_s {
Expand All @@ -71,7 +71,7 @@ struct stamp {

struct RR_TF_s {
__u8 flags;
struct stamp times[0]; /* Variable number of these beasts */
struct stamp times[]; /* Variable number of these beasts */
} __attribute__ ((packed));

/* Linux-specific extension for transparent decompression */
Expand Down
4 changes: 2 additions & 2 deletions fs/select.c
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ u64 select_estimate_accuracy(struct timespec64 *tv)
struct poll_table_page {
struct poll_table_page * next;
struct poll_table_entry * entry;
struct poll_table_entry entries[0];
struct poll_table_entry entries[];
};

#define POLL_TABLE_FULL(table) \
Expand Down Expand Up @@ -836,7 +836,7 @@ SYSCALL_DEFINE1(old_select, struct sel_arg_struct __user *, arg)
struct poll_list {
struct poll_list *next;
int len;
struct pollfd entries[0];
struct pollfd entries[];
};

#define POLLFD_PER_PAGE ((PAGE_SIZE-sizeof(struct poll_list)) / sizeof(struct pollfd))
Expand Down
2 changes: 1 addition & 1 deletion include/linux/fs.h
Original file line number Diff line number Diff line change
Expand Up @@ -3285,7 +3285,7 @@ static inline ino_t parent_ino(struct dentry *dentry)
*/
struct simple_transaction_argresp {
ssize_t size;
char data[0];
char data[];
};

#define SIMPLE_TRANSACTION_LIMIT (PAGE_SIZE - sizeof(struct simple_transaction_argresp))
Expand Down

0 comments on commit 5e01fdf

Please sign in to comment.