Re: [PATCH] CIPSO: Fix unaligned memory access in cipso_v4_gentag_hdr
flat view
From: Paul Moore <paul@paul-moore.com>
Date: 2021-03-04 21:46:49
On Thu, Mar 4, 2021 at 4:17 PM Ondrej Mosnacek [off-list ref] wrote:
On Thu, Mar 4, 2021 at 10:09 PM Seergey Nazarov [off-list ref] wrote:quoted
We need to use put_unaligned when writing 32-bit DOI value in cipso_v4_gentag_hdr to avoid unaligned memory access. Signed-off-by: Sergey Nazarov <redacted> --- net/ipv4/cipso_ipv4.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)diff --git a/net/ipv4/cipso_ipv4.c b/net/ipv4/cipso_ipv4.c index 471d33a..28dfe40 100644 --- a/net/ipv4/cipso_ipv4.c +++ b/net/ipv4/cipso_ipv4.c@@ -1162,7 +1162,7 @@ static void cipso_v4_gentag_hdr(const structcipso_v4_doi *doi_def, { buf[0] = IPOPT_CIPSO; buf[1] = CIPSO_V4_HDR_LEN + len; - *(__be32 *)&buf[2] = htonl(doi_def->doi); + put_unaligned_be32(doi_def->doi, (__be32 *)&buf[2]);I think you can now also drop the cast, since put_unaligned_be32() expects a void *.
Yes, it shouldn't be necessary. You should also send this to netdev as NetLabel code lives under net/ and goes to Linus via the netdev tree. Also, looking at the code, there are a few similar spots you should probably fix while you are revising this patch: * the short/__be16 assignment in cipso_v4_map_cat_enum_hton() * the short/__be16 assignments in cipso_v4_map_cat_rng_hton() * the long/__be32 assignment in calipso_genopt() -- paul moore www.paul-moore.com