tools: usb: ffs-test: read the descriptor counts with unaligned accesses
PATCH 1/1 tools: usb: ffs-test: read the descriptor counts with unaligned accesses
descs_to_legacy() reads the descriptor counts through a __le32 pointer taken from a member of a packed struct, which may be unaligned:
ffs-test.c:235:40: warning: taking address of packed member of 'struct <anonymous>' may result in an unaligned pointer value [-Waddress-of-packed-member]
Walk the counts with a byte pointer and get_unaligned_le32().
--- tools/usb/ffs-test.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
tools/usb/ffs-test.c +4 -3
@@ -232,7 +232,8 @@ static size_t descs_to_legacy(void **legacy, const void *descriptors_v2)const struct usb_functionfs_descs_head_v2 header;const __le32 counts[]; } __attribute__((packed)) *const in = descriptors_v2; -const __le32 *counts = in->counts; +const unsigned char *counts = + (const unsigned char *)descriptors_v2 +sizeof (in->header);__u32 flags; if (le32_to_cpu(in->header.magic) !=
@@ -252,9 +253,9 @@ static size_t descs_to_legacy(void **legacy, const void *descriptors_v2)break ; \if (length <4 ) \return 0 ; \ - ret =le32_to_cpu (*counts); \ + ret =get_unaligned_le32 (counts); \ length -=4 ; \ - ++counts; \ + counts +=4 ; \ }while (0 )GET_NEXT_COUNT_IF_FLAG (fs_count,FUNCTIONFS_HAS_FS_DESC );
Signature · 1 line
2.53.0
[email protected]
AI reviewSashiko has reviewed this patch and found no issues. It looks great!
Quoted 10 lines
descs_to_legacy()reads the descriptor counts through a__le32pointer taken from a member of a packed struct, which may be unaligned:ffs-test.c:235:40: warning: taking address of packed member of 'struct <anonymous>' may result in an unaligned pointer value [-Waddress-of-packed-member]
Walk the counts with a byte pointer and
get_unaligned_le32().Fixes b9a4274699c69 ("tools: ffs-test: add compatibility code for old kernels")Assisted-by LLMSigned-off-by Sasha Levin <[email protected]>
Sashiko has reviewed this patch and found no issues. It looks great!
Signature · 1 line
Sashiko AI review · https://sashiko.dev/#/patchset/[email protected]?part=1
Quoted 19 lines · Sasha Levin
descs_to_legacy()reads the descriptor counts through a__le32pointer taken from a member of a packed struct, which may be unaligned:ffs-test.c:235:40: warning: taking address of packed member of 'struct <anonymous>' may result in an unaligned pointer value [-Waddress-of-packed-member]
Walk the counts with a byte pointer and
get_unaligned_le32().Fixes b9a4274699c69 ("tools: ffs-test: add compatibility code for old kernels")Assisted-by LLMSigned-off-by Sasha Levin <[email protected]>--- tools/usb/ffs-test.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)tools/usb/ffs-test.c +0
-0
tools/usb/ffs-test.c static size_t descs_to_legacy(void **legacy, const void *descriptors_v2) · line 236
Quoted 6 lines
tools/usb/ffs-test.c +2
-1@@ -232,7 +232,8 @@ static size_t descs_to_legacy(void **legacy, const void *descriptors_v2)const struct usb_functionfs_descs_head_v2 header;const __le32 counts[]; } __attribute__((packed)) *const in = descriptors_v2; -const __le32 *counts = in->counts; +const unsigned char *counts = + (const unsigned char *)descriptors_v2 +sizeof (in->header);
Why not:
+ const unsigned char *counts = (const void*)in->counts;
Or maybe change the structure to const unsigned char counts[4][] and the variable const unsigned char (*counts)[4]?
Quoted 15 lines
tools/usb/ffs-test.c +2
-2__u32 flags; if (le32_to_cpu(in->header.magic) !=@@ -252,9 +253,9 @@ static size_t descs_to_legacy(void **legacy, const void *descriptors_v2)break ; \if (length <4 ) \return 0 ; \ - ret =le32_to_cpu (*counts); \ + ret =get_unaligned_le32 (counts); \ length -=4 ; \ - ++counts; \ + counts +=4 ; \ }while (0 )GET_NEXT_COUNT_IF_FLAG (fs_count,FUNCTIONFS_HAS_FS_DESC );
Signature · 3 lines
Best regards ミハウ “𝓶𝓲𝓷𝓪86” ナザレヴィツ «If at first you don’t succeed, give up skydiving»
PATCH v2 1/1 tools: usb: ffs-test: read the descriptor counts with unaligned accesses
descs_to_legacy() reads the descriptor counts through a __le32 pointer taken from a member of a packed struct, which may be unaligned:
ffs-test.c:235:40: warning: taking address of packed member of 'struct <anonymous>' may result in an unaligned pointer value [-Waddress-of-packed-member]
Walk the counts with a byte pointer and get_unaligned_le32().
---
Changes in v2:
- Take the byte pointer from in->counts instead of computing it from descriptors_v2 (Michał Nazarewicz)
- Link to v1: https://lore.kernel.org/r/[email protected]
tools/usb/ffs-test.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
tools/usb/ffs-test.c +3 -3
@@ -232,7 +232,7 @@ static size_t descs_to_legacy(void **legacy, const void *descriptors_v2)const struct usb_functionfs_descs_head_v2 header;const __le32 counts[]; } __attribute__((packed)) *const in = descriptors_v2; -const __le32 *counts = in->counts; +const unsigned char *counts = (const void *)in->counts;__u32 flags; if (le32_to_cpu(in->header.magic) !=
@@ -252,9 +252,9 @@ static size_t descs_to_legacy(void **legacy, const void *descriptors_v2)break ; \if (length <4 ) \return 0 ; \ - ret =le32_to_cpu (*counts); \ + ret =get_unaligned_le32 (counts); \ length -=4 ; \ - ++counts; \ + counts +=4 ; \ }while (0 )GET_NEXT_COUNT_IF_FLAG (fs_count,FUNCTIONFS_HAS_FS_DESC );
Signature · 1 line
2.53.0
[email protected]
AI reviewSashiko has reviewed this patch and found no issues. It looks great!
Quoted 10 lines
descs_to_legacy()reads the descriptor counts through a__le32pointer taken from a member of a packed struct, which may be unaligned:ffs-test.c:235:40: warning: taking address of packed member of 'struct <anonymous>' may result in an unaligned pointer value [-Waddress-of-packed-member]
Walk the counts with a byte pointer and
get_unaligned_le32().Fixes b9a4274699c69 ("tools: ffs-test: add compatibility code for old kernels")Assisted-by LLMSigned-off-by Sasha Levin <[email protected]>
Sashiko has reviewed this patch and found no issues. It looks great!
Signature · 1 line
Sashiko AI review · https://sashiko.dev/#/patchset/[email protected]?part=1
Quoted 10 lines · Sasha Levin
descs_to_legacy()reads the descriptor counts through a__le32pointer taken from a member of a packed struct, which may be unaligned:ffs-test.c:235:40: warning: taking address of packed member of 'struct <anonymous>' may result in an unaligned pointer value [-Waddress-of-packed-member]
Walk the counts with a byte pointer and
get_unaligned_le32().Fixes b9a4274699c69 ("tools: ffs-test: add compatibility code for old kernels")Assisted-by LLMSigned-off-by Sasha Levin <[email protected]>
Quoted 34 lines
---
Changes in v2:
- Take the byte pointer fromin->countsinstead of computing it fromdescriptors_v2(Michał Nazarewicz)
- Link to v1: https://lore.kernel.org/r/[email protected]tools/usb/ffs-test.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)tools/usb/ffs-test.c +3
-3@@ -232,7 +232,7 @@ static size_t descs_to_legacy(void **legacy, const void *descriptors_v2)const struct usb_functionfs_descs_head_v2 header;const __le32 counts[]; } __attribute__((packed)) *const in = descriptors_v2; -const __le32 *counts = in->counts; +const unsigned char *counts = (const void *)in->counts;__u32 flags; if (le32_to_cpu(in->header.magic) !=@@ -252,9 +252,9 @@ static size_t descs_to_legacy(void **legacy, const void *descriptors_v2)break ; \if (length <4 ) \return 0 ; \ - ret =le32_to_cpu (*counts); \ + ret =get_unaligned_le32 (counts); \ length -=4 ; \ - ++counts; \ + counts +=4 ; \ }while (0 )GET_NEXT_COUNT_IF_FLAG (fs_count,FUNCTIONFS_HAS_FS_DESC );
Signature · 3 lines
Best regards ミハウ “𝓶𝓲𝓷𝓪86” ナザレヴィツ «If at first you don’t succeed, give up skydiving»