Linux 6.3 compat: Fix memcpy "detected field-spanning write" error
Add a new union member of flexible array to dnode_phys_t and use it in the macro so we can silence the memcpy() fortify error. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Youzhong Yang <yyang@mathworks.com> Closes #14737
This commit is contained in:
parent
f0aca5f7bb
commit
d7fb413f0f
|
@ -120,7 +120,11 @@ extern "C" {
|
||||||
#define DN_MAX_LEVELS (DIV_ROUND_UP(DN_MAX_OFFSET_SHIFT - SPA_MINBLOCKSHIFT, \
|
#define DN_MAX_LEVELS (DIV_ROUND_UP(DN_MAX_OFFSET_SHIFT - SPA_MINBLOCKSHIFT, \
|
||||||
DN_MIN_INDBLKSHIFT - SPA_BLKPTRSHIFT) + 1)
|
DN_MIN_INDBLKSHIFT - SPA_BLKPTRSHIFT) + 1)
|
||||||
|
|
||||||
#define DN_BONUS(dnp) ((void*)((dnp)->dn_bonus + \
|
/*
|
||||||
|
* Use the flexible array instead of the fixed length one dn_bonus
|
||||||
|
* to address memcpy/memmove fortify error
|
||||||
|
*/
|
||||||
|
#define DN_BONUS(dnp) ((void*)((dnp)->dn_bonus_flexible + \
|
||||||
(((dnp)->dn_nblkptr - 1) * sizeof (blkptr_t))))
|
(((dnp)->dn_nblkptr - 1) * sizeof (blkptr_t))))
|
||||||
#define DN_MAX_BONUS_LEN(dnp) \
|
#define DN_MAX_BONUS_LEN(dnp) \
|
||||||
((dnp->dn_flags & DNODE_FLAG_SPILL_BLKPTR) ? \
|
((dnp->dn_flags & DNODE_FLAG_SPILL_BLKPTR) ? \
|
||||||
|
@ -266,6 +270,10 @@ typedef struct dnode_phys {
|
||||||
sizeof (blkptr_t)];
|
sizeof (blkptr_t)];
|
||||||
blkptr_t dn_spill;
|
blkptr_t dn_spill;
|
||||||
};
|
};
|
||||||
|
struct {
|
||||||
|
blkptr_t __dn_ignore4;
|
||||||
|
uint8_t dn_bonus_flexible[];
|
||||||
|
};
|
||||||
};
|
};
|
||||||
} dnode_phys_t;
|
} dnode_phys_t;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue