Skip to content

Commit

Permalink
Linux 6.3 compat: Fix memcpy "detected field-spanning write" error
Browse files Browse the repository at this point in the history
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
  • Loading branch information
youzhongyang authored Apr 13, 2023
1 parent c71fe71 commit 27a82cb
Showing 1 changed file with 9 additions and 1 deletion.
10 changes: 9 additions & 1 deletion include/sys/dnode.h
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,11 @@ extern "C" {
#define DN_MAX_LEVELS (DIV_ROUND_UP(DN_MAX_OFFSET_SHIFT - SPA_MINBLOCKSHIFT, \
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))))
#define DN_MAX_BONUS_LEN(dnp) \
((dnp->dn_flags & DNODE_FLAG_SPILL_BLKPTR) ? \
Expand Down Expand Up @@ -266,6 +270,10 @@ typedef struct dnode_phys {
sizeof (blkptr_t)];
blkptr_t dn_spill;
};
struct {
blkptr_t __dn_ignore4;
uint8_t dn_bonus_flexible[];
};
};
} dnode_phys_t;

Expand Down

0 comments on commit 27a82cb

Please sign in to comment.