mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-22 18:40:43 +03:00
Constify structures containing function pointers
The PaX team modified the kernel's modpost to report writeable function pointers as section mismatches because they are potential exploit targets. We could ignore the warnings, but their presence can obscure actual issues. Proper const correctness can also catch programming mistakes. Building the kernel modules against a PaX/GrSecurity patched Linux 3.4.2 kernel reports 133 section mismatches prior to this patch. This patch eliminates 130 of them. The quantity of writeable function pointers eliminated by constifying each structure is as follows: vdev_opts_t 52 zil_replay_func_t 24 zio_compress_info_t 24 zio_checksum_info_t 9 space_map_ops_t 7 arc_byteswap_func_t 5 The remaining 3 writeable function pointers cannot be addressed by this patch. 2 of them are in zpl_fs_type. The kernel's sget function requires that this be non-const. The final writeable function pointer is created by SPL_SHRINKER_DECLARE. The kernel's set_shrinker() and remove_shrinker() functions also require that this be non-const. Signed-off-by: Richard Yao <ryao@cs.stonybrook.edu> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes #1300
This commit is contained in:
committed by
Brian Behlendorf
parent
c38367c73f
commit
b01615d5ac
+3
-3
@@ -641,7 +641,7 @@ typedef struct dmu_object_info {
|
||||
uint64_t doi_fill_count; /* number of non-empty blocks */
|
||||
} dmu_object_info_t;
|
||||
|
||||
typedef void arc_byteswap_func_t(void *buf, size_t size);
|
||||
typedef void (*const arc_byteswap_func_t)(void *buf, size_t size);
|
||||
|
||||
typedef struct dmu_object_type_info {
|
||||
dmu_object_byteswap_t ot_byteswap;
|
||||
@@ -649,8 +649,8 @@ typedef struct dmu_object_type_info {
|
||||
char *ot_name;
|
||||
} dmu_object_type_info_t;
|
||||
|
||||
typedef struct dmu_object_byteswap_info {
|
||||
arc_byteswap_func_t *ob_func;
|
||||
typedef const struct dmu_object_byteswap_info {
|
||||
arc_byteswap_func_t ob_func;
|
||||
char *ob_name;
|
||||
} dmu_object_byteswap_info_t;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user