FAILED: patch "[PATCH] crypto: drbg - Fix misaligned writes in CTR_DRBG and" failed to apply to 6.18-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 6.18-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.18.y
git checkout FETCH_HEAD
git cherry-pick -x ddc4dedb9ba3c8eecbc8c050fffd46d1b7e75c21
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2026071522-shape-broadways-fe6c@gregkh' --subject-prefix 'PATCH 6.18.y' 'HEAD^..'
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From ddc4dedb9ba3c8eecbc8c050fffd46d1b7e75c21 Mon Sep 17 00:00:00 2001
From: Eric Biggers <[email protected]>
Date: Sun, 19 Apr 2026 23:33:46 -0700
Subject: [PATCH] crypto: drbg - Fix misaligned writes in CTR_DRBG and
HASH_DRBG
drbg_cpu_to_be32() is being used to do a plain write to a byte array, which doesn't have any alignment guarantee. This can cause a misaligned write. Replace it with the correct function, put_unaligned_be32().
crypto/df_sp80090a.c +4 -3
@@ -10,6 +10,7 @@#include <linux/kernel.h> #include <linux/module.h> #include <linux/string.h> +#include <linux/unaligned.h> #include <crypto/aes.h> #include <crypto/df_sp80090a.h> #include <crypto/internal/drbg.h>
@@ -141,10 +142,10 @@ int crypto_drbg_ctr_df(struct aes_enckey *aeskey,/* 10.4.2 step 2 -- calculate the entire length of all input data */ list_for_each_entry (seed, seedlist, list) inputlen += seed->len; -drbg_cpu_to_be32 (inputlen, &L_N [0 ]); +put_unaligned_be32 (inputlen, &L_N [0 ]);/* 10.4.2 step 3 */ -drbg_cpu_to_be32 (bytes_to_return, &L_N [4 ]); +put_unaligned_be32 (bytes_to_return, &L_N [4 ]);/* 10.4.2 step 5: length is L_N, input_string, one byte, padding */ padlen = (inputlen +sizeof (L_N ) +1 ) % (blocklen_bytes);
@@ -175,7 +176,7 @@ int crypto_drbg_ctr_df(struct aes_enckey *aeskey,* holds zeros after allocation -- even the increment of i * is irrelevant as the increment remains within length of i */ -drbg_cpu_to_be32 (i, iv); +put_unaligned_be32 (i, iv);/* 10.4.2 step 9.2 -- BCC and concatenation with temp */ drbg_ctr_bcc (aeskey, temp + templen,K , &bcc_list, blocklen_bytes, keylen);
crypto/drbg.c +2 -1
@@ -103,6 +103,7 @@#include <linux/kernel.h> #include <linux/jiffies.h> #include <linux/string_choices.h> +#include <linux/unaligned.h> /*************************************************************** * Backend cipher definitions available to DRBG
@@ -601,7 +602,7 @@ static int drbg_hash_df(struct drbg_state *drbg,/* 10.4.1 step 3 */ input[0 ] =1 ; -drbg_cpu_to_be32 ((outlen *8 ), &input[1 ]); +put_unaligned_be32 (outlen *8 , &input[1 ]);/* 10.4.1 step 4.1 -- concatenation of data for input into hash */ drbg_string_fill (&data, input,5 );
include/crypto/internal/drbg.h +0 -18
@@ -9,24 +9,6 @@#ifndef _INTERNAL_DRBG_H#define _INTERNAL_DRBG_H -/* -* Convert an integer into a byte representation of this integer. -* The byte representation is big-endian -* -* @val value to be converted -* @buf buffer holding the converted integer -- caller must ensure that -* buffer size is at least 32 bit -*/ -static inline void drbg_cpu_to_be32 (__u32 val,unsigned char *buf) -{ -struct s { -__be32 conv; - }; -struct s *conversion = (struct s *)buf; - - conversion->conv =cpu_to_be32 (val); -} -/* * Concatenation Helper and string operation helper *