forked from rpms/kernel
		
	kernel-6.6.0-0.rc7.20231024gitd88520ad73b7.55
* Tue Oct 24 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.6.0-0.rc7.d88520ad73b7.55] - redhat: remove pending-rhel CONFIG_XFS_ASSERT_FATAL file (Patrick Talbert) - New configs in fs/xfs (Fedora Kernel Team) - crypto: rng - Override drivers/char/random in FIPS mode (Herbert Xu) - random: Add hook to override device reads and getrandom(2) (Herbert Xu) - Linux v6.6.0-0.rc7.d88520ad73b7 Resolves: Signed-off-by: Justin M. Forbes <jforbes@fedoraproject.org>
This commit is contained in:
		
							parent
							
								
									ff61ab282e
								
							
						
					
					
						commit
						34b9a6b2d0
					
				| @ -12,7 +12,7 @@ RHEL_MINOR = 99 | |||||||
| #
 | #
 | ||||||
| # Use this spot to avoid future merge conflicts.
 | # Use this spot to avoid future merge conflicts.
 | ||||||
| # Do not trim this comment.
 | # Do not trim this comment.
 | ||||||
| RHEL_RELEASE = 54 | RHEL_RELEASE = 55 | ||||||
| 
 | 
 | ||||||
| #
 | #
 | ||||||
| # RHEL_REBASE_NUM
 | # RHEL_REBASE_NUM
 | ||||||
|  | |||||||
| @ -1,3 +1,9 @@ | |||||||
|  | "https://gitlab.com/cki-project/kernel-ark/-/commit"/1820b71069f04d9347e71caeb9fe49e095dd28ec | ||||||
|  |  1820b71069f04d9347e71caeb9fe49e095dd28ec crypto: rng - Override drivers/char/random in FIPS mode | ||||||
|  | 
 | ||||||
|  | "https://gitlab.com/cki-project/kernel-ark/-/commit"/325cfb22f086df02e268cfbfa6ff96d89d0acd5d | ||||||
|  |  325cfb22f086df02e268cfbfa6ff96d89d0acd5d random: Add hook to override device reads and getrandom(2) | ||||||
|  | 
 | ||||||
| "https://gitlab.com/cki-project/kernel-ark/-/commit"/8374deeb36ca291927f714ba4b78349fb3a6e3b1 | "https://gitlab.com/cki-project/kernel-ark/-/commit"/8374deeb36ca291927f714ba4b78349fb3a6e3b1 | ||||||
|  8374deeb36ca291927f714ba4b78349fb3a6e3b1 [redhat] kernel/rh_messages.c: move hardware tables to rh_messages.h |  8374deeb36ca291927f714ba4b78349fb3a6e3b1 [redhat] kernel/rh_messages.c: move hardware tables to rh_messages.h | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -7855,7 +7855,6 @@ CONFIG_XFRM_SUB_POLICY=y | |||||||
| # CONFIG_XFRM_USER_COMPAT is not set | # CONFIG_XFRM_USER_COMPAT is not set | ||||||
| CONFIG_XFRM_USER=y | CONFIG_XFRM_USER=y | ||||||
| CONFIG_XFRM=y | CONFIG_XFRM=y | ||||||
| CONFIG_XFS_ASSERT_FATAL=y |  | ||||||
| # CONFIG_XFS_DEBUG is not set | # CONFIG_XFS_DEBUG is not set | ||||||
| CONFIG_XFS_FS=m | CONFIG_XFS_FS=m | ||||||
| # CONFIG_XFS_ONLINE_REPAIR is not set | # CONFIG_XFS_ONLINE_REPAIR is not set | ||||||
|  | |||||||
| @ -7830,7 +7830,6 @@ CONFIG_XFRM_SUB_POLICY=y | |||||||
| # CONFIG_XFRM_USER_COMPAT is not set | # CONFIG_XFRM_USER_COMPAT is not set | ||||||
| CONFIG_XFRM_USER=y | CONFIG_XFRM_USER=y | ||||||
| CONFIG_XFRM=y | CONFIG_XFRM=y | ||||||
| CONFIG_XFS_ASSERT_FATAL=y |  | ||||||
| # CONFIG_XFS_DEBUG is not set | # CONFIG_XFS_DEBUG is not set | ||||||
| CONFIG_XFS_FS=m | CONFIG_XFS_FS=m | ||||||
| # CONFIG_XFS_ONLINE_REPAIR is not set | # CONFIG_XFS_ONLINE_REPAIR is not set | ||||||
|  | |||||||
| @ -7851,7 +7851,6 @@ CONFIG_XFRM_SUB_POLICY=y | |||||||
| # CONFIG_XFRM_USER_COMPAT is not set | # CONFIG_XFRM_USER_COMPAT is not set | ||||||
| CONFIG_XFRM_USER=y | CONFIG_XFRM_USER=y | ||||||
| CONFIG_XFRM=y | CONFIG_XFRM=y | ||||||
| CONFIG_XFS_ASSERT_FATAL=y |  | ||||||
| # CONFIG_XFS_DEBUG is not set | # CONFIG_XFS_DEBUG is not set | ||||||
| CONFIG_XFS_FS=m | CONFIG_XFS_FS=m | ||||||
| # CONFIG_XFS_ONLINE_REPAIR is not set | # CONFIG_XFS_ONLINE_REPAIR is not set | ||||||
|  | |||||||
| @ -7826,7 +7826,6 @@ CONFIG_XFRM_SUB_POLICY=y | |||||||
| # CONFIG_XFRM_USER_COMPAT is not set | # CONFIG_XFRM_USER_COMPAT is not set | ||||||
| CONFIG_XFRM_USER=y | CONFIG_XFRM_USER=y | ||||||
| CONFIG_XFRM=y | CONFIG_XFRM=y | ||||||
| CONFIG_XFS_ASSERT_FATAL=y |  | ||||||
| # CONFIG_XFS_DEBUG is not set | # CONFIG_XFS_DEBUG is not set | ||||||
| CONFIG_XFS_FS=m | CONFIG_XFS_FS=m | ||||||
| # CONFIG_XFS_ONLINE_REPAIR is not set | # CONFIG_XFS_ONLINE_REPAIR is not set | ||||||
|  | |||||||
| @ -7907,7 +7907,6 @@ CONFIG_XFRM_SUB_POLICY=y | |||||||
| # CONFIG_XFRM_USER_COMPAT is not set | # CONFIG_XFRM_USER_COMPAT is not set | ||||||
| CONFIG_XFRM_USER=y | CONFIG_XFRM_USER=y | ||||||
| CONFIG_XFRM=y | CONFIG_XFRM=y | ||||||
| CONFIG_XFS_ASSERT_FATAL=y |  | ||||||
| # CONFIG_XFS_DEBUG is not set | # CONFIG_XFS_DEBUG is not set | ||||||
| CONFIG_XFS_FS=m | CONFIG_XFS_FS=m | ||||||
| # CONFIG_XFS_ONLINE_REPAIR is not set | # CONFIG_XFS_ONLINE_REPAIR is not set | ||||||
|  | |||||||
| @ -7882,7 +7882,6 @@ CONFIG_XFRM_SUB_POLICY=y | |||||||
| # CONFIG_XFRM_USER_COMPAT is not set | # CONFIG_XFRM_USER_COMPAT is not set | ||||||
| CONFIG_XFRM_USER=y | CONFIG_XFRM_USER=y | ||||||
| CONFIG_XFRM=y | CONFIG_XFRM=y | ||||||
| CONFIG_XFS_ASSERT_FATAL=y |  | ||||||
| # CONFIG_XFS_DEBUG is not set | # CONFIG_XFS_DEBUG is not set | ||||||
| CONFIG_XFS_FS=m | CONFIG_XFS_FS=m | ||||||
| # CONFIG_XFS_ONLINE_REPAIR is not set | # CONFIG_XFS_ONLINE_REPAIR is not set | ||||||
|  | |||||||
| @ -7330,7 +7330,6 @@ CONFIG_XFRM_SUB_POLICY=y | |||||||
| # CONFIG_XFRM_USER_COMPAT is not set | # CONFIG_XFRM_USER_COMPAT is not set | ||||||
| CONFIG_XFRM_USER=y | CONFIG_XFRM_USER=y | ||||||
| CONFIG_XFRM=y | CONFIG_XFRM=y | ||||||
| CONFIG_XFS_ASSERT_FATAL=y |  | ||||||
| # CONFIG_XFS_DEBUG is not set | # CONFIG_XFS_DEBUG is not set | ||||||
| CONFIG_XFS_FS=m | CONFIG_XFS_FS=m | ||||||
| # CONFIG_XFS_ONLINE_REPAIR is not set | # CONFIG_XFS_ONLINE_REPAIR is not set | ||||||
|  | |||||||
| @ -7307,7 +7307,6 @@ CONFIG_XFRM_SUB_POLICY=y | |||||||
| # CONFIG_XFRM_USER_COMPAT is not set | # CONFIG_XFRM_USER_COMPAT is not set | ||||||
| CONFIG_XFRM_USER=y | CONFIG_XFRM_USER=y | ||||||
| CONFIG_XFRM=y | CONFIG_XFRM=y | ||||||
| CONFIG_XFS_ASSERT_FATAL=y |  | ||||||
| # CONFIG_XFS_DEBUG is not set | # CONFIG_XFS_DEBUG is not set | ||||||
| CONFIG_XFS_FS=m | CONFIG_XFS_FS=m | ||||||
| # CONFIG_XFS_ONLINE_REPAIR is not set | # CONFIG_XFS_ONLINE_REPAIR is not set | ||||||
|  | |||||||
| @ -7315,7 +7315,6 @@ CONFIG_XFRM_SUB_POLICY=y | |||||||
| # CONFIG_XFRM_USER_COMPAT is not set | # CONFIG_XFRM_USER_COMPAT is not set | ||||||
| CONFIG_XFRM_USER=y | CONFIG_XFRM_USER=y | ||||||
| CONFIG_XFRM=y | CONFIG_XFRM=y | ||||||
| CONFIG_XFS_ASSERT_FATAL=y |  | ||||||
| # CONFIG_XFS_DEBUG is not set | # CONFIG_XFS_DEBUG is not set | ||||||
| CONFIG_XFS_FS=m | CONFIG_XFS_FS=m | ||||||
| # CONFIG_XFS_ONLINE_REPAIR is not set | # CONFIG_XFS_ONLINE_REPAIR is not set | ||||||
|  | |||||||
| @ -7292,7 +7292,6 @@ CONFIG_XFRM_SUB_POLICY=y | |||||||
| # CONFIG_XFRM_USER_COMPAT is not set | # CONFIG_XFRM_USER_COMPAT is not set | ||||||
| CONFIG_XFRM_USER=y | CONFIG_XFRM_USER=y | ||||||
| CONFIG_XFRM=y | CONFIG_XFRM=y | ||||||
| CONFIG_XFS_ASSERT_FATAL=y |  | ||||||
| # CONFIG_XFS_DEBUG is not set | # CONFIG_XFS_DEBUG is not set | ||||||
| CONFIG_XFS_FS=m | CONFIG_XFS_FS=m | ||||||
| # CONFIG_XFS_ONLINE_REPAIR is not set | # CONFIG_XFS_ONLINE_REPAIR is not set | ||||||
|  | |||||||
| @ -7315,7 +7315,6 @@ CONFIG_XFRM_SUB_POLICY=y | |||||||
| # CONFIG_XFRM_USER_COMPAT is not set | # CONFIG_XFRM_USER_COMPAT is not set | ||||||
| CONFIG_XFRM_USER=y | CONFIG_XFRM_USER=y | ||||||
| CONFIG_XFRM=y | CONFIG_XFRM=y | ||||||
| CONFIG_XFS_ASSERT_FATAL=y |  | ||||||
| # CONFIG_XFS_DEBUG is not set | # CONFIG_XFS_DEBUG is not set | ||||||
| # CONFIG_XFS_FS is not set | # CONFIG_XFS_FS is not set | ||||||
| # CONFIG_XFS_ONLINE_REPAIR is not set | # CONFIG_XFS_ONLINE_REPAIR is not set | ||||||
|  | |||||||
| @ -7665,7 +7665,6 @@ CONFIG_XFRM_SUB_POLICY=y | |||||||
| # CONFIG_XFRM_USER_COMPAT is not set | # CONFIG_XFRM_USER_COMPAT is not set | ||||||
| CONFIG_XFRM_USER=y | CONFIG_XFRM_USER=y | ||||||
| CONFIG_XFRM=y | CONFIG_XFRM=y | ||||||
| CONFIG_XFS_ASSERT_FATAL=y |  | ||||||
| # CONFIG_XFS_DEBUG is not set | # CONFIG_XFS_DEBUG is not set | ||||||
| CONFIG_XFS_FS=m | CONFIG_XFS_FS=m | ||||||
| # CONFIG_XFS_ONLINE_REPAIR is not set | # CONFIG_XFS_ONLINE_REPAIR is not set | ||||||
|  | |||||||
| @ -7641,7 +7641,6 @@ CONFIG_XFRM_SUB_POLICY=y | |||||||
| # CONFIG_XFRM_USER_COMPAT is not set | # CONFIG_XFRM_USER_COMPAT is not set | ||||||
| CONFIG_XFRM_USER=y | CONFIG_XFRM_USER=y | ||||||
| CONFIG_XFRM=y | CONFIG_XFRM=y | ||||||
| CONFIG_XFS_ASSERT_FATAL=y |  | ||||||
| # CONFIG_XFS_DEBUG is not set | # CONFIG_XFS_DEBUG is not set | ||||||
| CONFIG_XFS_FS=m | CONFIG_XFS_FS=m | ||||||
| # CONFIG_XFS_ONLINE_REPAIR is not set | # CONFIG_XFS_ONLINE_REPAIR is not set | ||||||
|  | |||||||
| @ -7722,7 +7722,6 @@ CONFIG_XFRM_SUB_POLICY=y | |||||||
| # CONFIG_XFRM_USER_COMPAT is not set | # CONFIG_XFRM_USER_COMPAT is not set | ||||||
| CONFIG_XFRM_USER=y | CONFIG_XFRM_USER=y | ||||||
| CONFIG_XFRM=y | CONFIG_XFRM=y | ||||||
| CONFIG_XFS_ASSERT_FATAL=y |  | ||||||
| # CONFIG_XFS_DEBUG is not set | # CONFIG_XFS_DEBUG is not set | ||||||
| CONFIG_XFS_FS=m | CONFIG_XFS_FS=m | ||||||
| # CONFIG_XFS_ONLINE_REPAIR is not set | # CONFIG_XFS_ONLINE_REPAIR is not set | ||||||
|  | |||||||
| @ -7698,7 +7698,6 @@ CONFIG_XFRM_SUB_POLICY=y | |||||||
| # CONFIG_XFRM_USER_COMPAT is not set | # CONFIG_XFRM_USER_COMPAT is not set | ||||||
| CONFIG_XFRM_USER=y | CONFIG_XFRM_USER=y | ||||||
| CONFIG_XFRM=y | CONFIG_XFRM=y | ||||||
| CONFIG_XFS_ASSERT_FATAL=y |  | ||||||
| # CONFIG_XFS_DEBUG is not set | # CONFIG_XFS_DEBUG is not set | ||||||
| CONFIG_XFS_FS=m | CONFIG_XFS_FS=m | ||||||
| # CONFIG_XFS_ONLINE_REPAIR is not set | # CONFIG_XFS_ONLINE_REPAIR is not set | ||||||
|  | |||||||
							
								
								
									
										13
									
								
								kernel.spec
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								kernel.spec
									
									
									
									
									
								
							| @ -163,13 +163,13 @@ Summary: The Linux kernel | |||||||
| %define specrpmversion 6.6.0 | %define specrpmversion 6.6.0 | ||||||
| %define specversion 6.6.0 | %define specversion 6.6.0 | ||||||
| %define patchversion 6.6 | %define patchversion 6.6 | ||||||
| %define pkgrelease 0.rc7.54 | %define pkgrelease 0.rc7.20231024gitd88520ad73b7.55 | ||||||
| %define kversion 6 | %define kversion 6 | ||||||
| %define tarfile_release 6.6-rc7 | %define tarfile_release 6.6-rc7-18-gd88520ad73b7 | ||||||
| # This is needed to do merge window version magic | # This is needed to do merge window version magic | ||||||
| %define patchlevel 6 | %define patchlevel 6 | ||||||
| # This allows pkg_release to have configurable %%{?dist} tag | # This allows pkg_release to have configurable %%{?dist} tag | ||||||
| %define specrelease 0.rc7.54%{?buildid}%{?dist} | %define specrelease 0.rc7.20231024gitd88520ad73b7.55%{?buildid}%{?dist} | ||||||
| # This defines the kabi tarball version | # This defines the kabi tarball version | ||||||
| %define kabiversion 6.6.0 | %define kabiversion 6.6.0 | ||||||
| 
 | 
 | ||||||
| @ -3709,6 +3709,13 @@ fi\ | |||||||
| # | # | ||||||
| # | # | ||||||
| %changelog | %changelog | ||||||
|  | * Tue Oct 24 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.6.0-0.rc7.d88520ad73b7.55] | ||||||
|  | - redhat: remove pending-rhel CONFIG_XFS_ASSERT_FATAL file (Patrick Talbert) | ||||||
|  | - New configs in fs/xfs (Fedora Kernel Team) | ||||||
|  | - crypto: rng - Override drivers/char/random in FIPS mode (Herbert Xu) | ||||||
|  | - random: Add hook to override device reads and getrandom(2) (Herbert Xu) | ||||||
|  | - Linux v6.6.0-0.rc7.d88520ad73b7 | ||||||
|  | 
 | ||||||
| * Mon Oct 23 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.6.0-0.rc7.54] | * Mon Oct 23 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.6.0-0.rc7.54] | ||||||
| - Linux v6.6.0-0.rc7 | - Linux v6.6.0-0.rc7 | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -9,12 +9,15 @@ | |||||||
|  arch/s390/kernel/setup.c                           |   4 + |  arch/s390/kernel/setup.c                           |   4 + | ||||||
|  arch/x86/kernel/cpu/common.c                       |   1 + |  arch/x86/kernel/cpu/common.c                       |   1 + | ||||||
|  arch/x86/kernel/setup.c                            |  68 ++- |  arch/x86/kernel/setup.c                            |  68 ++- | ||||||
|  |  crypto/drbg.c                                      |  18 +- | ||||||
|  |  crypto/rng.c                                       | 149 +++++- | ||||||
|  drivers/acpi/apei/hest.c                           |   8 + |  drivers/acpi/apei/hest.c                           |   8 + | ||||||
|  drivers/acpi/irq.c                                 |  17 +- |  drivers/acpi/irq.c                                 |  17 +- | ||||||
|  drivers/acpi/scan.c                                |   9 + |  drivers/acpi/scan.c                                |   9 + | ||||||
|  drivers/ata/libahci.c                              |  18 + |  drivers/ata/libahci.c                              |  18 + | ||||||
|  drivers/char/ipmi/ipmi_dmi.c                       |  15 + |  drivers/char/ipmi/ipmi_dmi.c                       |  15 + | ||||||
|  drivers/char/ipmi/ipmi_msghandler.c                |  16 +- |  drivers/char/ipmi/ipmi_msghandler.c                |  16 +- | ||||||
|  |  drivers/char/random.c                              | 122 +++++ | ||||||
|  drivers/firmware/efi/Makefile                      |   1 + |  drivers/firmware/efi/Makefile                      |   1 + | ||||||
|  drivers/firmware/efi/efi.c                         | 124 +++-- |  drivers/firmware/efi/efi.c                         | 124 +++-- | ||||||
|  drivers/firmware/efi/secureboot.c                  |  38 ++ |  drivers/firmware/efi/secureboot.c                  |  38 ++ | ||||||
| @ -41,12 +44,14 @@ | |||||||
|  drivers/scsi/sd.c                                  |  10 + |  drivers/scsi/sd.c                                  |  10 + | ||||||
|  drivers/usb/core/hub.c                             |   7 + |  drivers/usb/core/hub.c                             |   7 + | ||||||
|  fs/afs/main.c                                      |   3 + |  fs/afs/main.c                                      |   3 + | ||||||
|  |  include/linux/crypto.h                             |   1 + | ||||||
|  include/linux/efi.h                                |  22 +- |  include/linux/efi.h                                |  22 +- | ||||||
|  include/linux/kernel.h                             |  14 + |  include/linux/kernel.h                             |  14 + | ||||||
|  include/linux/lsm_hook_defs.h                      |   2 + |  include/linux/lsm_hook_defs.h                      |   2 + | ||||||
|  include/linux/module.h                             |   5 + |  include/linux/module.h                             |   5 + | ||||||
|  include/linux/panic.h                              |  18 +- |  include/linux/panic.h                              |  18 +- | ||||||
|  include/linux/pci.h                                |   5 + |  include/linux/pci.h                                |   5 + | ||||||
|  |  include/linux/random.h                             |  10 + | ||||||
|  include/linux/rh_kabi.h                            | 515 +++++++++++++++++++++ |  include/linux/rh_kabi.h                            | 515 +++++++++++++++++++++ | ||||||
|  include/linux/rmi.h                                |   1 + |  include/linux/rmi.h                                |   1 + | ||||||
|  include/linux/security.h                           |   5 + |  include/linux/security.h                           |   5 + | ||||||
| @ -64,7 +69,7 @@ | |||||||
|  security/lockdown/Kconfig                          |  13 + |  security/lockdown/Kconfig                          |  13 + | ||||||
|  security/lockdown/lockdown.c                       |   1 + |  security/lockdown/lockdown.c                       |   1 + | ||||||
|  security/security.c                                |  12 + |  security/security.c                                |  12 + | ||||||
|  66 files changed, 1779 insertions(+), 188 deletions(-) |  71 files changed, 2060 insertions(+), 207 deletions(-) | ||||||
| 
 | 
 | ||||||
| diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
 | diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
 | ||||||
| index 0a1731a0f0ef..7015d8d057a0 100644
 | index 0a1731a0f0ef..7015d8d057a0 100644
 | ||||||
| @ -359,6 +364,280 @@ index b098b1fa2470..6b936d786590 100644 | |||||||
|  	unwind_init(); |  	unwind_init(); | ||||||
|  } |  } | ||||||
|   |   | ||||||
|  | diff --git a/crypto/drbg.c b/crypto/drbg.c
 | ||||||
|  | index ff4ebbc68efa..2410034cca4f 100644
 | ||||||
|  | --- a/crypto/drbg.c
 | ||||||
|  | +++ b/crypto/drbg.c
 | ||||||
|  | @@ -1510,13 +1510,14 @@ static int drbg_generate(struct drbg_state *drbg,
 | ||||||
|  |   * Wrapper around drbg_generate which can pull arbitrary long strings | ||||||
|  |   * from the DRBG without hitting the maximum request limitation. | ||||||
|  |   * | ||||||
|  | - * Parameters: see drbg_generate
 | ||||||
|  | + * Parameters: see drbg_generate, except @reseed, which triggers reseeding
 | ||||||
|  |   * Return codes: see drbg_generate -- if one drbg_generate request fails, | ||||||
|  |   *		 the entire drbg_generate_long request fails | ||||||
|  |   */ | ||||||
|  |  static int drbg_generate_long(struct drbg_state *drbg, | ||||||
|  |  			      unsigned char *buf, unsigned int buflen, | ||||||
|  | -			      struct drbg_string *addtl)
 | ||||||
|  | +			      struct drbg_string *addtl,
 | ||||||
|  | +			      bool reseed)
 | ||||||
|  |  { | ||||||
|  |  	unsigned int len = 0; | ||||||
|  |  	unsigned int slice = 0; | ||||||
|  | @@ -1526,6 +1527,8 @@ static int drbg_generate_long(struct drbg_state *drbg,
 | ||||||
|  |  		slice = ((buflen - len) / drbg_max_request_bytes(drbg)); | ||||||
|  |  		chunk = slice ? drbg_max_request_bytes(drbg) : (buflen - len); | ||||||
|  |  		mutex_lock(&drbg->drbg_mutex); | ||||||
|  | +		if (reseed)
 | ||||||
|  | +			drbg->seeded = DRBG_SEED_STATE_UNSEEDED;
 | ||||||
|  |  		err = drbg_generate(drbg, buf + len, chunk, addtl); | ||||||
|  |  		mutex_unlock(&drbg->drbg_mutex); | ||||||
|  |  		if (0 > err) | ||||||
|  | @@ -1952,6 +1955,7 @@ static int drbg_kcapi_random(struct crypto_rng *tfm,
 | ||||||
|  |  	struct drbg_state *drbg = crypto_rng_ctx(tfm); | ||||||
|  |  	struct drbg_string *addtl = NULL; | ||||||
|  |  	struct drbg_string string; | ||||||
|  | +	int err;
 | ||||||
|  |   | ||||||
|  |  	if (slen) { | ||||||
|  |  		/* linked list variable is now local to allow modification */ | ||||||
|  | @@ -1959,7 +1963,15 @@ static int drbg_kcapi_random(struct crypto_rng *tfm,
 | ||||||
|  |  		addtl = &string; | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  | -	return drbg_generate_long(drbg, dst, dlen, addtl);
 | ||||||
|  | +	err = drbg_generate_long(drbg, dst, dlen, addtl,
 | ||||||
|  | +				 (crypto_tfm_get_flags(crypto_rng_tfm(tfm)) &
 | ||||||
|  | +				  CRYPTO_TFM_REQ_NEED_RESEED) ==
 | ||||||
|  | +				 CRYPTO_TFM_REQ_NEED_RESEED);
 | ||||||
|  | +
 | ||||||
|  | +	crypto_tfm_clear_flags(crypto_rng_tfm(tfm),
 | ||||||
|  | +			       CRYPTO_TFM_REQ_NEED_RESEED);
 | ||||||
|  | +
 | ||||||
|  | +	return err;
 | ||||||
|  |  } | ||||||
|  |   | ||||||
|  |  /* | ||||||
|  | diff --git a/crypto/rng.c b/crypto/rng.c
 | ||||||
|  | index 279dffdebf59..d24dd37205cd 100644
 | ||||||
|  | --- a/crypto/rng.c
 | ||||||
|  | +++ b/crypto/rng.c
 | ||||||
|  | @@ -12,10 +12,13 @@
 | ||||||
|  |  #include <linux/atomic.h> | ||||||
|  |  #include <linux/cryptouser.h> | ||||||
|  |  #include <linux/err.h> | ||||||
|  | +#include <linux/fips.h>
 | ||||||
|  |  #include <linux/kernel.h> | ||||||
|  |  #include <linux/module.h> | ||||||
|  |  #include <linux/mutex.h> | ||||||
|  |  #include <linux/random.h> | ||||||
|  | +#include <linux/sched.h>
 | ||||||
|  | +#include <linux/sched/signal.h>
 | ||||||
|  |  #include <linux/seq_file.h> | ||||||
|  |  #include <linux/slab.h> | ||||||
|  |  #include <linux/string.h> | ||||||
|  | @@ -23,7 +26,9 @@
 | ||||||
|  |   | ||||||
|  |  #include "internal.h" | ||||||
|  |   | ||||||
|  | -static DEFINE_MUTEX(crypto_default_rng_lock);
 | ||||||
|  | +static ____cacheline_aligned_in_smp DEFINE_MUTEX(crypto_reseed_rng_lock);
 | ||||||
|  | +static struct crypto_rng *crypto_reseed_rng;
 | ||||||
|  | +static ____cacheline_aligned_in_smp DEFINE_MUTEX(crypto_default_rng_lock);
 | ||||||
|  |  struct crypto_rng *crypto_default_rng; | ||||||
|  |  EXPORT_SYMBOL_GPL(crypto_default_rng); | ||||||
|  |  static int crypto_default_rng_refcnt; | ||||||
|  | @@ -136,31 +141,37 @@ struct crypto_rng *crypto_alloc_rng(const char *alg_name, u32 type, u32 mask)
 | ||||||
|  |  } | ||||||
|  |  EXPORT_SYMBOL_GPL(crypto_alloc_rng); | ||||||
|  |   | ||||||
|  | -int crypto_get_default_rng(void)
 | ||||||
|  | +static int crypto_get_rng(struct crypto_rng **rngp)
 | ||||||
|  |  { | ||||||
|  |  	struct crypto_rng *rng; | ||||||
|  |  	int err; | ||||||
|  |   | ||||||
|  | -	mutex_lock(&crypto_default_rng_lock);
 | ||||||
|  | -	if (!crypto_default_rng) {
 | ||||||
|  | +	if (!*rngp) {
 | ||||||
|  |  		rng = crypto_alloc_rng("stdrng", 0, 0); | ||||||
|  |  		err = PTR_ERR(rng); | ||||||
|  |  		if (IS_ERR(rng)) | ||||||
|  | -			goto unlock;
 | ||||||
|  | +			return err;
 | ||||||
|  |   | ||||||
|  |  		err = crypto_rng_reset(rng, NULL, crypto_rng_seedsize(rng)); | ||||||
|  |  		if (err) { | ||||||
|  |  			crypto_free_rng(rng); | ||||||
|  | -			goto unlock;
 | ||||||
|  | +			return err;
 | ||||||
|  |  		} | ||||||
|  |   | ||||||
|  | -		crypto_default_rng = rng;
 | ||||||
|  | +		*rngp = rng;
 | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  | -	crypto_default_rng_refcnt++;
 | ||||||
|  | -	err = 0;
 | ||||||
|  | +	return 0;
 | ||||||
|  | +}
 | ||||||
|  | +
 | ||||||
|  | +int crypto_get_default_rng(void)
 | ||||||
|  | +{
 | ||||||
|  | +	int err;
 | ||||||
|  |   | ||||||
|  | -unlock:
 | ||||||
|  | +	mutex_lock(&crypto_default_rng_lock);
 | ||||||
|  | +	err = crypto_get_rng(&crypto_default_rng);
 | ||||||
|  | +	if (!err)
 | ||||||
|  | +		crypto_default_rng_refcnt++;
 | ||||||
|  |  	mutex_unlock(&crypto_default_rng_lock); | ||||||
|  |   | ||||||
|  |  	return err; | ||||||
|  | @@ -176,24 +187,33 @@ void crypto_put_default_rng(void)
 | ||||||
|  |  EXPORT_SYMBOL_GPL(crypto_put_default_rng); | ||||||
|  |   | ||||||
|  |  #if defined(CONFIG_CRYPTO_RNG) || defined(CONFIG_CRYPTO_RNG_MODULE) | ||||||
|  | -int crypto_del_default_rng(void)
 | ||||||
|  | +static int crypto_del_rng(struct crypto_rng **rngp, int *refcntp,
 | ||||||
|  | +		      struct mutex *lock)
 | ||||||
|  |  { | ||||||
|  |  	int err = -EBUSY; | ||||||
|  |   | ||||||
|  | -	mutex_lock(&crypto_default_rng_lock);
 | ||||||
|  | -	if (crypto_default_rng_refcnt)
 | ||||||
|  | +	mutex_lock(lock);
 | ||||||
|  | +	if (refcntp && *refcntp)
 | ||||||
|  |  		goto out; | ||||||
|  |   | ||||||
|  | -	crypto_free_rng(crypto_default_rng);
 | ||||||
|  | -	crypto_default_rng = NULL;
 | ||||||
|  | +	crypto_free_rng(*rngp);
 | ||||||
|  | +	*rngp = NULL;
 | ||||||
|  |   | ||||||
|  |  	err = 0; | ||||||
|  |   | ||||||
|  |  out: | ||||||
|  | -	mutex_unlock(&crypto_default_rng_lock);
 | ||||||
|  | +	mutex_unlock(lock);
 | ||||||
|  |   | ||||||
|  |  	return err; | ||||||
|  |  } | ||||||
|  | +
 | ||||||
|  | +int crypto_del_default_rng(void)
 | ||||||
|  | +{
 | ||||||
|  | +	return crypto_del_rng(&crypto_default_rng, &crypto_default_rng_refcnt,
 | ||||||
|  | +			      &crypto_default_rng_lock) ?:
 | ||||||
|  | +	       crypto_del_rng(&crypto_reseed_rng, NULL,
 | ||||||
|  | +			      &crypto_reseed_rng_lock);
 | ||||||
|  | +}
 | ||||||
|  |  EXPORT_SYMBOL_GPL(crypto_del_default_rng); | ||||||
|  |  #endif | ||||||
|  |   | ||||||
|  | @@ -251,5 +271,102 @@ void crypto_unregister_rngs(struct rng_alg *algs, int count)
 | ||||||
|  |  } | ||||||
|  |  EXPORT_SYMBOL_GPL(crypto_unregister_rngs); | ||||||
|  |   | ||||||
|  | +static ssize_t crypto_devrandom_read_iter(struct iov_iter *iter, bool reseed)
 | ||||||
|  | +{
 | ||||||
|  | +	struct crypto_rng *rng;
 | ||||||
|  | +	u8 tmp[256];
 | ||||||
|  | +	ssize_t ret;
 | ||||||
|  | +
 | ||||||
|  | +	if (unlikely(!iov_iter_count(iter)))
 | ||||||
|  | +		return 0;
 | ||||||
|  | +
 | ||||||
|  | +	if (reseed) {
 | ||||||
|  | +		u32 flags = 0;
 | ||||||
|  | +
 | ||||||
|  | +		/* If reseeding is requested, acquire a lock on
 | ||||||
|  | +		 * crypto_reseed_rng so it is not swapped out until
 | ||||||
|  | +		 * the initial random bytes are generated.
 | ||||||
|  | +		 *
 | ||||||
|  | +		 * The algorithm implementation is also protected with
 | ||||||
|  | +		 * a separate mutex (drbg->drbg_mutex) around the
 | ||||||
|  | +		 * reseed-and-generate operation.
 | ||||||
|  | +		 */
 | ||||||
|  | +		mutex_lock(&crypto_reseed_rng_lock);
 | ||||||
|  | +
 | ||||||
|  | +		/* If crypto_default_rng is not set, it will be seeded
 | ||||||
|  | +		 * at creation in __crypto_get_default_rng and thus no
 | ||||||
|  | +		 * reseeding is needed.
 | ||||||
|  | +		 */
 | ||||||
|  | +		if (crypto_reseed_rng)
 | ||||||
|  | +			flags |= CRYPTO_TFM_REQ_NEED_RESEED;
 | ||||||
|  | +
 | ||||||
|  | +		ret = crypto_get_rng(&crypto_reseed_rng);
 | ||||||
|  | +		if (ret) {
 | ||||||
|  | +			mutex_unlock(&crypto_reseed_rng_lock);
 | ||||||
|  | +			return ret;
 | ||||||
|  | +		}
 | ||||||
|  | +
 | ||||||
|  | +		rng = crypto_reseed_rng;
 | ||||||
|  | +		crypto_tfm_set_flags(crypto_rng_tfm(rng), flags);
 | ||||||
|  | +	} else {
 | ||||||
|  | +		ret = crypto_get_default_rng();
 | ||||||
|  | +		if (ret)
 | ||||||
|  | +			return ret;
 | ||||||
|  | +		rng = crypto_default_rng;
 | ||||||
|  | +	}
 | ||||||
|  | +
 | ||||||
|  | +	for (;;) {
 | ||||||
|  | +		size_t i, copied;
 | ||||||
|  | +		int err;
 | ||||||
|  | +
 | ||||||
|  | +		i = min_t(size_t, iov_iter_count(iter), sizeof(tmp));
 | ||||||
|  | +		err = crypto_rng_get_bytes(rng, tmp, i);
 | ||||||
|  | +		if (err) {
 | ||||||
|  | +			ret = err;
 | ||||||
|  | +			break;
 | ||||||
|  | +		}
 | ||||||
|  | +
 | ||||||
|  | +		copied = copy_to_iter(tmp, i, iter);
 | ||||||
|  | +		ret += copied;
 | ||||||
|  | +
 | ||||||
|  | +		if (!iov_iter_count(iter))
 | ||||||
|  | +			break;
 | ||||||
|  | +
 | ||||||
|  | +		if (need_resched()) {
 | ||||||
|  | +			if (signal_pending(current))
 | ||||||
|  | +				break;
 | ||||||
|  | +			schedule();
 | ||||||
|  | +		}
 | ||||||
|  | +	}
 | ||||||
|  | +
 | ||||||
|  | +	if (reseed)
 | ||||||
|  | +		mutex_unlock(&crypto_reseed_rng_lock);
 | ||||||
|  | +	else
 | ||||||
|  | +		crypto_put_default_rng();
 | ||||||
|  | +	memzero_explicit(tmp, sizeof(tmp));
 | ||||||
|  | +
 | ||||||
|  | +	return ret;
 | ||||||
|  | +}
 | ||||||
|  | +
 | ||||||
|  | +static const struct random_extrng crypto_devrandom_rng = {
 | ||||||
|  | +	.extrng_read_iter = crypto_devrandom_read_iter,
 | ||||||
|  | +	.owner = THIS_MODULE,
 | ||||||
|  | +};
 | ||||||
|  | +
 | ||||||
|  | +static int __init crypto_rng_init(void)
 | ||||||
|  | +{
 | ||||||
|  | +	if (fips_enabled)
 | ||||||
|  | +		random_register_extrng(&crypto_devrandom_rng);
 | ||||||
|  | +	return 0;
 | ||||||
|  | +}
 | ||||||
|  | +
 | ||||||
|  | +static void __exit crypto_rng_exit(void)
 | ||||||
|  | +{
 | ||||||
|  | +	random_unregister_extrng();
 | ||||||
|  | +}
 | ||||||
|  | +
 | ||||||
|  | +late_initcall(crypto_rng_init);
 | ||||||
|  | +module_exit(crypto_rng_exit);
 | ||||||
|  | +
 | ||||||
|  |  MODULE_LICENSE("GPL"); | ||||||
|  |  MODULE_DESCRIPTION("Random Number Generator"); | ||||||
| diff --git a/drivers/acpi/apei/hest.c b/drivers/acpi/apei/hest.c
 | diff --git a/drivers/acpi/apei/hest.c b/drivers/acpi/apei/hest.c
 | ||||||
| index 6aef1ee5e1bd..8f146b1b4972 100644
 | index 6aef1ee5e1bd..8f146b1b4972 100644
 | ||||||
| --- a/drivers/acpi/apei/hest.c
 | --- a/drivers/acpi/apei/hest.c
 | ||||||
| @ -531,6 +810,203 @@ index 186f1fee7534..93e3a76596ff 100644 | |||||||
|  	mutex_lock(&ipmi_interfaces_mutex); |  	mutex_lock(&ipmi_interfaces_mutex); | ||||||
|  	rv = ipmi_register_driver(); |  	rv = ipmi_register_driver(); | ||||||
|  	mutex_unlock(&ipmi_interfaces_mutex); |  	mutex_unlock(&ipmi_interfaces_mutex); | ||||||
|  | diff --git a/drivers/char/random.c b/drivers/char/random.c
 | ||||||
|  | index 3cb37760dfec..20aa9f3b8b48 100644
 | ||||||
|  | --- a/drivers/char/random.c
 | ||||||
|  | +++ b/drivers/char/random.c
 | ||||||
|  | @@ -51,6 +51,7 @@
 | ||||||
|  |  #include <linux/completion.h> | ||||||
|  |  #include <linux/uuid.h> | ||||||
|  |  #include <linux/uaccess.h> | ||||||
|  | +#include <linux/rcupdate.h>
 | ||||||
|  |  #include <linux/suspend.h> | ||||||
|  |  #include <linux/siphash.h> | ||||||
|  |  #include <linux/sched/isolation.h> | ||||||
|  | @@ -309,6 +310,11 @@ static void crng_fast_key_erasure(u8 key[CHACHA_KEY_SIZE],
 | ||||||
|  |  	memzero_explicit(first_block, sizeof(first_block)); | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | +/*
 | ||||||
|  | + * Hook for external RNG.
 | ||||||
|  | + */
 | ||||||
|  | +static const struct random_extrng __rcu *extrng;
 | ||||||
|  | +
 | ||||||
|  |  /* | ||||||
|  |   * This function returns a ChaCha state that you may use for generating | ||||||
|  |   * random data. It also returns up to 32 bytes on its own of random data | ||||||
|  | @@ -739,6 +745,9 @@ static void __cold _credit_init_bits(size_t bits)
 | ||||||
|  |  } | ||||||
|  |   | ||||||
|  |   | ||||||
|  | +static const struct file_operations extrng_random_fops;
 | ||||||
|  | +static const struct file_operations extrng_urandom_fops;
 | ||||||
|  | +
 | ||||||
|  |  /********************************************************************** | ||||||
|  |   * | ||||||
|  |   * Entropy collection routines. | ||||||
|  | @@ -956,6 +965,19 @@ void __init add_bootloader_randomness(const void *buf, size_t len)
 | ||||||
|  |  		credit_init_bits(len * 8); | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | +void random_register_extrng(const struct random_extrng *rng)
 | ||||||
|  | +{
 | ||||||
|  | +	rcu_assign_pointer(extrng, rng);
 | ||||||
|  | +}
 | ||||||
|  | +EXPORT_SYMBOL_GPL(random_register_extrng);
 | ||||||
|  | +
 | ||||||
|  | +void random_unregister_extrng(void)
 | ||||||
|  | +{
 | ||||||
|  | +	RCU_INIT_POINTER(extrng, NULL);
 | ||||||
|  | +	synchronize_rcu();
 | ||||||
|  | +}
 | ||||||
|  | +EXPORT_SYMBOL_GPL(random_unregister_extrng);
 | ||||||
|  | +
 | ||||||
|  |  #if IS_ENABLED(CONFIG_VMGENID) | ||||||
|  |  static BLOCKING_NOTIFIER_HEAD(vmfork_chain); | ||||||
|  |   | ||||||
|  | @@ -1366,6 +1388,7 @@ SYSCALL_DEFINE3(getrandom, char __user *, ubuf, size_t, len, unsigned int, flags
 | ||||||
|  |  	struct iov_iter iter; | ||||||
|  |  	struct iovec iov; | ||||||
|  |  	int ret; | ||||||
|  | +	const struct random_extrng *rng;
 | ||||||
|  |   | ||||||
|  |  	if (flags & ~(GRND_NONBLOCK | GRND_RANDOM | GRND_INSECURE)) | ||||||
|  |  		return -EINVAL; | ||||||
|  | @@ -1377,6 +1400,21 @@ SYSCALL_DEFINE3(getrandom, char __user *, ubuf, size_t, len, unsigned int, flags
 | ||||||
|  |  	if ((flags & (GRND_INSECURE | GRND_RANDOM)) == (GRND_INSECURE | GRND_RANDOM)) | ||||||
|  |  		return -EINVAL; | ||||||
|  |   | ||||||
|  | +	rcu_read_lock();
 | ||||||
|  | +	rng = rcu_dereference(extrng);
 | ||||||
|  | +	if (rng && !try_module_get(rng->owner))
 | ||||||
|  | +		rng = NULL;
 | ||||||
|  | +	rcu_read_unlock();
 | ||||||
|  | +
 | ||||||
|  | +	if (rng) {
 | ||||||
|  | +		ret = import_single_range(ITER_DEST, ubuf, len, &iov, &iter);
 | ||||||
|  | +		if (unlikely(ret))
 | ||||||
|  | +			return ret;
 | ||||||
|  | +		ret = rng->extrng_read_iter(&iter, !!(flags & GRND_RANDOM));
 | ||||||
|  | +		module_put(rng->owner);
 | ||||||
|  | +		return ret;
 | ||||||
|  | +	}
 | ||||||
|  | +
 | ||||||
|  |  	if (!crng_ready() && !(flags & GRND_INSECURE)) { | ||||||
|  |  		if (flags & GRND_NONBLOCK) | ||||||
|  |  			return -EAGAIN; | ||||||
|  | @@ -1397,6 +1435,12 @@ static __poll_t random_poll(struct file *file, poll_table *wait)
 | ||||||
|  |  	return crng_ready() ? EPOLLIN | EPOLLRDNORM : EPOLLOUT | EPOLLWRNORM; | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | +static __poll_t extrng_poll(struct file *file, poll_table * wait)
 | ||||||
|  | +{
 | ||||||
|  | +	/* extrng pool is always full, always read, no writes */
 | ||||||
|  | +	return EPOLLIN | EPOLLRDNORM;
 | ||||||
|  | +}
 | ||||||
|  | +
 | ||||||
|  |  static ssize_t write_pool_user(struct iov_iter *iter) | ||||||
|  |  { | ||||||
|  |  	u8 block[BLAKE2S_BLOCK_SIZE]; | ||||||
|  | @@ -1538,7 +1582,58 @@ static int random_fasync(int fd, struct file *filp, int on)
 | ||||||
|  |  	return fasync_helper(fd, filp, on, &fasync); | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | +static int random_open(struct inode *inode, struct file *filp)
 | ||||||
|  | +{
 | ||||||
|  | +	const struct random_extrng *rng;
 | ||||||
|  | +
 | ||||||
|  | +	rcu_read_lock();
 | ||||||
|  | +	rng = rcu_dereference(extrng);
 | ||||||
|  | +	if (rng && !try_module_get(rng->owner))
 | ||||||
|  | +		rng = NULL;
 | ||||||
|  | +	rcu_read_unlock();
 | ||||||
|  | +
 | ||||||
|  | +	if (!rng)
 | ||||||
|  | +		return 0;
 | ||||||
|  | +
 | ||||||
|  | +	filp->f_op = &extrng_random_fops;
 | ||||||
|  | +	filp->private_data = rng->owner;
 | ||||||
|  | +
 | ||||||
|  | +	return 0;
 | ||||||
|  | +}
 | ||||||
|  | +
 | ||||||
|  | +static int urandom_open(struct inode *inode, struct file *filp)
 | ||||||
|  | +{
 | ||||||
|  | +	const struct random_extrng *rng;
 | ||||||
|  | +
 | ||||||
|  | +	rcu_read_lock();
 | ||||||
|  | +	rng = rcu_dereference(extrng);
 | ||||||
|  | +	if (rng && !try_module_get(rng->owner))
 | ||||||
|  | +		rng = NULL;
 | ||||||
|  | +	rcu_read_unlock();
 | ||||||
|  | +
 | ||||||
|  | +	if (!rng)
 | ||||||
|  | +		return 0;
 | ||||||
|  | +
 | ||||||
|  | +	filp->f_op = &extrng_urandom_fops;
 | ||||||
|  | +	filp->private_data = rng->owner;
 | ||||||
|  | +
 | ||||||
|  | +	return 0;
 | ||||||
|  | +}
 | ||||||
|  | +
 | ||||||
|  | +static int extrng_release(struct inode *inode, struct file *filp)
 | ||||||
|  | +{
 | ||||||
|  | +	module_put(filp->private_data);
 | ||||||
|  | +	return 0;
 | ||||||
|  | +}
 | ||||||
|  | +
 | ||||||
|  | +static ssize_t
 | ||||||
|  | +extrng_read_iter(struct kiocb *kiocb, struct iov_iter *iter)
 | ||||||
|  | +{
 | ||||||
|  | +	return rcu_dereference_raw(extrng)->extrng_read_iter(iter, false);
 | ||||||
|  | +}
 | ||||||
|  | +
 | ||||||
|  |  const struct file_operations random_fops = { | ||||||
|  | +	.open  = random_open,
 | ||||||
|  |  	.read_iter = random_read_iter, | ||||||
|  |  	.write_iter = random_write_iter, | ||||||
|  |  	.poll = random_poll, | ||||||
|  | @@ -1551,6 +1646,7 @@ const struct file_operations random_fops = {
 | ||||||
|  |  }; | ||||||
|  |   | ||||||
|  |  const struct file_operations urandom_fops = { | ||||||
|  | +	.open  = urandom_open,
 | ||||||
|  |  	.read_iter = urandom_read_iter, | ||||||
|  |  	.write_iter = random_write_iter, | ||||||
|  |  	.unlocked_ioctl = random_ioctl, | ||||||
|  | @@ -1561,6 +1657,32 @@ const struct file_operations urandom_fops = {
 | ||||||
|  |  	.splice_write = iter_file_splice_write, | ||||||
|  |  }; | ||||||
|  |   | ||||||
|  | +static const struct file_operations extrng_random_fops = {
 | ||||||
|  | +	.open  = random_open,
 | ||||||
|  | +	.read_iter  = extrng_read_iter,
 | ||||||
|  | +	.write_iter = random_write_iter,
 | ||||||
|  | +	.poll  = extrng_poll,
 | ||||||
|  | +	.unlocked_ioctl = random_ioctl,
 | ||||||
|  | +	.compat_ioctl = compat_ptr_ioctl,
 | ||||||
|  | +	.fasync = random_fasync,
 | ||||||
|  | +	.llseek = noop_llseek,
 | ||||||
|  | +	.release = extrng_release,
 | ||||||
|  | +	.splice_read = copy_splice_read,
 | ||||||
|  | +	.splice_write = iter_file_splice_write,
 | ||||||
|  | +};
 | ||||||
|  | +
 | ||||||
|  | +static const struct file_operations extrng_urandom_fops = {
 | ||||||
|  | +	.open  = urandom_open,
 | ||||||
|  | +	.read_iter  = extrng_read_iter,
 | ||||||
|  | +	.write_iter = random_write_iter,
 | ||||||
|  | +	.unlocked_ioctl = random_ioctl,
 | ||||||
|  | +	.compat_ioctl = compat_ptr_ioctl,
 | ||||||
|  | +	.fasync = random_fasync,
 | ||||||
|  | +	.llseek = noop_llseek,
 | ||||||
|  | +	.release = extrng_release,
 | ||||||
|  | +	.splice_read = copy_splice_read,
 | ||||||
|  | +	.splice_write = iter_file_splice_write,
 | ||||||
|  | +};
 | ||||||
|  |   | ||||||
|  |  /******************************************************************** | ||||||
|  |   * | ||||||
| diff --git a/drivers/firmware/efi/Makefile b/drivers/firmware/efi/Makefile
 | diff --git a/drivers/firmware/efi/Makefile b/drivers/firmware/efi/Makefile
 | ||||||
| index e489fefd23da..f2dfae764fb5 100644
 | index e489fefd23da..f2dfae764fb5 100644
 | ||||||
| --- a/drivers/firmware/efi/Makefile
 | --- a/drivers/firmware/efi/Makefile
 | ||||||
| @ -1704,6 +2180,18 @@ index eae288c8d40a..8b8bf447cedc 100644 | |||||||
|  	return ret; |  	return ret; | ||||||
|   |   | ||||||
|  error_proc: |  error_proc: | ||||||
|  | diff --git a/include/linux/crypto.h b/include/linux/crypto.h
 | ||||||
|  | index 31f6fee0c36c..b099200de233 100644
 | ||||||
|  | --- a/include/linux/crypto.h
 | ||||||
|  | +++ b/include/linux/crypto.h
 | ||||||
|  | @@ -135,6 +135,7 @@
 | ||||||
|  |  #define CRYPTO_TFM_REQ_FORBID_WEAK_KEYS	0x00000100 | ||||||
|  |  #define CRYPTO_TFM_REQ_MAY_SLEEP	0x00000200 | ||||||
|  |  #define CRYPTO_TFM_REQ_MAY_BACKLOG	0x00000400 | ||||||
|  | +#define CRYPTO_TFM_REQ_NEED_RESEED	0x00000800
 | ||||||
|  |   | ||||||
|  |  /* | ||||||
|  |   * Miscellaneous stuff. | ||||||
| diff --git a/include/linux/efi.h b/include/linux/efi.h
 | diff --git a/include/linux/efi.h b/include/linux/efi.h
 | ||||||
| index 80b21d1c6eaf..b66c0683f2fc 100644
 | index 80b21d1c6eaf..b66c0683f2fc 100644
 | ||||||
| --- a/include/linux/efi.h
 | --- a/include/linux/efi.h
 | ||||||
| @ -1881,6 +2369,34 @@ index 8c7c2c3c6c65..ee66c86fc538 100644 | |||||||
|  #if defined(CONFIG_PCIEPORTBUS) || defined(CONFIG_EEH) |  #if defined(CONFIG_PCIEPORTBUS) || defined(CONFIG_EEH) | ||||||
|  void pci_uevent_ers(struct pci_dev *pdev, enum  pci_ers_result err_type); |  void pci_uevent_ers(struct pci_dev *pdev, enum  pci_ers_result err_type); | ||||||
|  #endif |  #endif | ||||||
|  | diff --git a/include/linux/random.h b/include/linux/random.h
 | ||||||
|  | index b0a940af4fff..8a52424fd0d5 100644
 | ||||||
|  | --- a/include/linux/random.h
 | ||||||
|  | +++ b/include/linux/random.h
 | ||||||
|  | @@ -9,6 +9,13 @@
 | ||||||
|  |   | ||||||
|  |  #include <uapi/linux/random.h> | ||||||
|  |   | ||||||
|  | +struct iov_iter;
 | ||||||
|  | +
 | ||||||
|  | +struct random_extrng {
 | ||||||
|  | +	ssize_t (*extrng_read_iter)(struct iov_iter *iter, bool reseed);
 | ||||||
|  | +	struct module *owner;
 | ||||||
|  | +};
 | ||||||
|  | +
 | ||||||
|  |  struct notifier_block; | ||||||
|  |   | ||||||
|  |  void add_device_randomness(const void *buf, size_t len); | ||||||
|  | @@ -157,6 +164,9 @@ int random_prepare_cpu(unsigned int cpu);
 | ||||||
|  |  int random_online_cpu(unsigned int cpu); | ||||||
|  |  #endif | ||||||
|  |   | ||||||
|  | +void random_register_extrng(const struct random_extrng *rng);
 | ||||||
|  | +void random_unregister_extrng(void);
 | ||||||
|  | +
 | ||||||
|  |  #ifndef MODULE | ||||||
|  |  extern const struct file_operations random_fops, urandom_fops; | ||||||
|  |  #endif | ||||||
| diff --git a/include/linux/rh_kabi.h b/include/linux/rh_kabi.h
 | diff --git a/include/linux/rh_kabi.h b/include/linux/rh_kabi.h
 | ||||||
| new file mode 100644 | new file mode 100644 | ||||||
| index 000000000000..c7b42c1f1681
 | index 000000000000..c7b42c1f1681
 | ||||||
|  | |||||||
							
								
								
									
										6
									
								
								sources
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								sources
									
									
									
									
									
								
							| @ -1,3 +1,3 @@ | |||||||
| SHA512 (linux-6.6-rc7.tar.xz) = c554605c021dc569a22d5479a0792f5fc23a949a9fb76343ee3594b72514f2950611db69d4f1ab5a8d390ed979fd41a87aee080bbebf78c9cfc882e608ab63e3 | SHA512 (linux-6.6-rc7-18-gd88520ad73b7.tar.xz) = def0ee2feec1780c60049aa4fdb8d06fc16052a680712044750f0338af2a07d1c08e03db2fcae2163ea2196e935013740fee692fd72a82efa0bf83d24a8b248e | ||||||
| SHA512 (kernel-abi-stablelists-6.6.0.tar.bz2) = 896b1b24617e3a6905c26dd2a50b23ff2e2c7627f6b6dc12b328d5f74109016722b4ba050c5051886cb597308a793366346a34d7ec82a658b646d5288b347ae7 | SHA512 (kernel-abi-stablelists-6.6.0.tar.bz2) = e71711bc322fd6c936efc31ee25054dfc85e21dd7cdbecf151dcff39eadcd3ac32d769667957687d7816c733c824ef8d5d8af30a3bcf4725b28833194a926ec8 | ||||||
| SHA512 (kernel-kabi-dw-6.6.0.tar.bz2) = f98c14408c8434ecd253c6781c4f918cf1497da7bd55a79382fcf9dc67512d48e9357825c99a960616d2a9403d55be46989344cd201f762fd5450a2115e43c2a | SHA512 (kernel-kabi-dw-6.6.0.tar.bz2) = 7ba67c6e5874e4336adfa4dbe459d27c256367e0355d77d4b02ca067ee3a65dd1876aa58b7c1d93c5a293d86b6041403f2aca9bfb58564ccd4b393cce468bbef | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user