6.6.84-rc1 review
Subsystems (5)
Greg Kroah-Hartman
maintainerPATCH 143/166 rust: init: add missing newline to pr_info! calls
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alban Kurti <[email protected]>
[ Upstream commit 6933c1067fe6df8ddb34dd68bdb2aa172cbd08c8 ]
Several pr_info! calls in rust/kernel/init.rs (both in code examples and macro documentation) were missing a newline, causing logs to run together. This commit updates these calls to include a trailing newline, improving readability and consistency with the C side.
[ Replaced Closes with Link since it fixes part of the issue. Added
one more Fixes tag (still same set of stable kernels). - Miguel ]
--- rust/kernel/init.rs | 12 ++++++------ rust/kernel/init/macros.rs | 6 +++--- 2 files changed, 9 insertions(+), 9 deletions(-)
rust/kernel/init.rs +6 -6
@@ -258,7 +258,7 @@ pub mod macros;/// }, /// })); /// let foo: Pin<&mut Foo> = foo; -/// pr_info!("a: {}", &*foo.a.lock()); +/// pr_info!("a: {}\n", &*foo.a.lock()); /// ``` /// /// # Syntax
@@ -310,7 +310,7 @@ macro_rules! stack_pin_init {/// })?, /// })); /// let foo = foo.unwrap(); -/// pr_info!("a: {}", &*foo.a.lock()); +/// pr_info!("a: {}\n", &*foo.a.lock()); /// ``` /// /// ```rust,ignore
@@ -335,7 +335,7 @@ macro_rules! stack_pin_init {/// x: 64, /// })?, /// })); -/// pr_info!("a: {}", &*foo.a.lock()); +/// pr_info!("a: {}\n", &*foo.a.lock()); /// # Ok::<_, AllocError>(()) /// ``` ///
@@ -800,7 +800,7 @@ pub unsafe trait PinInit<T: ?Sized, E = Infallible>: Sized {/// /// impl Foo { /// fn setup(self: Pin<&mut Self>) { -/// pr_info!("Setting up foo"); +/// pr_info!("Setting up foo\n"); /// } /// } ///
@@ -906,7 +906,7 @@ pub unsafe trait Init<T: ?Sized, E = Infallible>: PinInit<T, E> {/// /// impl Foo { /// fn setup(&mut self) { -/// pr_info!("Setting up foo"); +/// pr_info!("Setting up foo\n"); /// } /// } ///
@@ -1229,7 +1229,7 @@ impl<T> InPlaceInit<T> for UniqueArc<T> {/// #[pinned_drop] /// impl PinnedDrop for Foo { /// fn drop(self: Pin<&mut Self>) { -/// pr_info!("Foo is being dropped!"); +/// pr_info!("Foo is being dropped!\n"); /// } /// } /// ```
rust/kernel/init/macros.rs +3 -3
@@ -45,7 +45,7 @@//! #[pinned_drop] //! impl PinnedDrop for Foo { //! fn drop(self: Pin<&mut Self>) { -//! pr_info!("{self:p} is getting dropped."); +//! pr_info!("{self:p} is getting dropped.\n"); //! } //! } //!
@@ -412,7 +412,7 @@//! #[pinned_drop] //! impl PinnedDrop for Foo { //! fn drop(self: Pin<&mut Self>) { -//! pr_info!("{self:p} is getting dropped."); +//! pr_info!("{self:p} is getting dropped.\n"); //! } //! } //! ```
@@ -423,7 +423,7 @@//! // `unsafe`, full path and the token parameter are added, everything else stays the same. //! unsafe impl ::kernel::init::PinnedDrop for Foo { //! fn drop(self: Pin<&mut Self>, _: ::kernel::init::__internal::OnlyCallFromDrop) { -//! pr_info!("{self:p} is getting dropped."); +//! pr_info!("{self:p} is getting dropped.\n"); //! } //! } //! ```
Signature · 1 line
2.39.5
Greg Kroah-Hartman
maintainerPATCH 144/166 ASoC: rt722-sdca: add missing readable registers
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Bard Liao <[email protected]>
[ Upstream commit 247fba13416af65b155949bae582d55c310f58b6 ]
SDW_SDCA_CTL(FUNC_NUM_MIC_ARRAY, RT722_SDCA_ENT_FU15, RT722_SDCA_CTL_FU_CH_GAIN, CH_01) ... SDW_SDCA_CTL(FUNC_NUM_MIC_ARRAY, RT722_SDCA_ENT_FU15, RT722_SDCA_CTL_FU_CH_GAIN, CH_04) are used by the "FU15 Boost Volume" control, but not marked as readable. And the mbq size are 2 for those registers.
--- sound/soc/codecs/rt722-sdca-sdw.c | 4 ++++ 1 file changed, 4 insertions(+)
sound/soc/codecs/rt722-sdca-sdw.c +4 -0
@@ -86,6 +86,10 @@ static bool rt722_sdca_mbq_readable_register(struct device *dev, unsigned int recase 0x6100067 : case 0x6100070 ... 0x610007c:case 0x6100080 : +case SDW_SDCA_CTL (FUNC_NUM_MIC_ARRAY ,RT722_SDCA_ENT_FU15 ,RT722_SDCA_CTL_FU_CH_GAIN , + CH_01) ... +SDW_SDCA_CTL (FUNC_NUM_MIC_ARRAY ,RT722_SDCA_ENT_FU15 ,RT722_SDCA_CTL_FU_CH_GAIN , +CH_04 ):case SDW_SDCA_CTL (FUNC_NUM_MIC_ARRAY ,RT722_SDCA_ENT_USER_FU1E ,RT722_SDCA_CTL_FU_VOLUME ,CH_01 ): case SDW_SDCA_CTL(FUNC_NUM_MIC_ARRAY, RT722_SDCA_ENT_USER_FU1E, RT722_SDCA_CTL_FU_VOLUME,
Signature · 1 line
2.39.5
Greg Kroah-Hartman
maintainerPATCH 145/166 ASoC: codecs: wm0010: Fix error handling path in wm0010_spi_probe()
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christophe JAILLET <[email protected]>
[ Upstream commit ed92bc5264c4357d4fca292c769ea9967cd3d3b6 ]
Free some resources in the error handling path of the probe, as already done in the remove function.
--- sound/soc/codecs/wm0010.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-)
sound/soc/codecs/wm0010.c +11 -2
@@ -951,7 +951,7 @@ static int wm0010_spi_probe(struct spi_device *spi)if (ret) {dev_err (wm0010->dev,"Failed to set IRQ %d as wake source: %d\n" , irq, ret); -return ret; + goto free_irq; }if (spi->max_speed_hz)
@@ -963,9 +963,18 @@ static int wm0010_spi_probe(struct spi_device *spi) &soc_component_dev_wm0010, wm0010_dai, ARRAY_SIZE(wm0010_dai));if (ret <0 ) -return ret; + goto disable_irq_wake;return 0 ; + +disable_irq_wake: +irq_set_irq_wake (wm0010->irq,0 ); + +free_irq: +if (wm0010->irq) +free_irq (wm0010->irq, wm0010); + +return ret; }static void wm0010_spi_remove (struct spi_device *spi)
Signature · 1 line
2.39.5
Greg Kroah-Hartman
maintainerPATCH 146/166 scripts: generate_rust_analyzer: add missing macros deps
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Tamir Duberstein <[email protected]>
[ Upstream commit 2e0f91aba507a3cb59f7a12fc3ea2b7d4d6675b7 ]
The macros crate has depended on std and proc_macro since its introduction in commit 1fbde52bde73 ("rust: add macros crate"). These dependencies were omitted from commit 8c4555ccc55c ("scripts: add generate_rust_analyzer.py") resulting in missing go-to-definition and autocomplete, and false-positive warnings emitted from rust-analyzer such as:
[{
"resource": "/Users/tamird/src/linux/rust/macros/module.rs",
"owner": "_generated_diagnostic_collection_name_#1",
"code": {
"value": "non_snake_case",
"target": {
"$mid": 1,
"path": "/rustc/",
"scheme": "https",
"authority": "doc.rust-lang.org",
"query": "search=non_snake_case"
}
},
"severity": 4,
"message": "Variable `None` should have snake_case name, e.g. `none`",
"source": "rust-analyzer",
"startLineNumber": 123,
"startColumn": 17,
"endLineNumber": 123,
"endColumn": 21
}]Add the missing dependencies to improve the developer experience.
[ Fiona had a different approach (thanks!) at:
https://lore.kernel.org/rust-for-linux/[email protected]/
But Tamir and Fiona agreed to this one. - Miguel ]
[ Removed return. Changed tag name. Added Link. Slightly
reworded. - Miguel ]
--- scripts/generate_rust_analyzer.py | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-)
scripts/generate_rust_analyzer.py +21 -9
@@ -49,14 +49,26 @@ def generate_crates(srctree, objtree, sysroot_src, external_src, cfgs): } }) - # First, the ones in `rust/` since they are a bit special. - append_crate( - "core", - sysroot_src / "core" / "src" / "lib.rs", - [], - cfg=crates_cfgs.get("core", []), - is_workspace_member=False, - ) + def append_sysroot_crate( + display_name, + deps, + cfg=[], + ): + append_crate( + display_name, + sysroot_src / display_name / "src" / "lib.rs", + deps, + cfg, + is_workspace_member=False, + ) + + # NB: sysroot crates reexport items from one another so setting up our transitive dependencies + # here is important for ensuring that rust-analyzer can resolve symbols. The sources of truth + # for this dependency graph are `(sysroot_src / crate / "Cargo.toml" for crate in crates)`. + append_sysroot_crate("core", [], cfg=crates_cfgs.get("core", [])) + append_sysroot_crate("alloc", ["core"]) + append_sysroot_crate("std", ["alloc", "core"]) + append_sysroot_crate("proc_macro", ["core", "std"]) append_crate( "compiler_builtins",
@@ -74,7 +86,7 @@ def generate_crates(srctree, objtree, sysroot_src, external_src, cfgs): append_crate( "macros", srctree / "rust" / "macros" / "lib.rs", - [], + ["std", "proc_macro"], is_proc_macro=True, ) crates[-1]["proc_macro_dylib_path"] = f"{objtree}/rust/libmacros.so"
Signature · 1 line
2.39.5
Greg Kroah-Hartman
maintainerPATCH 147/166 cifs: Fix integer overflow while processing acregmax mount option
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Murad Masimov <[email protected]>
[ Upstream commit 7489161b1852390b4413d57f2457cd40b34da6cc ]
User-provided mount parameter acregmax of type u32 is intended to have an upper limit, but before it is validated, the value is converted from seconds to jiffies which can lead to an integer overflow.
Found by Linux Verification Center (linuxtesting.org) with SVACE.
--- fs/smb/client/fs_context.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
fs/smb/client/fs_context.c +2 -2
@@ -1266,11 +1266,11 @@ static int smb3_fs_context_parse_param(struct fs_context *fc, }break ;case Opt_acregmax: - ctx->acregmax =HZ * result.uint_32; -if (ctx->acregmax >CIFS_MAX_ACTIMEO ) { +if (result.uint_32 >CIFS_MAX_ACTIMEO /HZ ) {cifs_errorf (fc,"acregmax too large\n" ); goto cifs_parse_mount_err; } + ctx->acregmax =HZ * result.uint_32;break ;case Opt_acdirmax: ctx->acdirmax =HZ * result.uint_32;
Signature · 1 line
2.39.5
Greg Kroah-Hartman
maintainerPATCH 148/166 cifs: Fix integer overflow while processing acdirmax mount option
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Murad Masimov <[email protected]>
[ Upstream commit 5b29891f91dfb8758baf1e2217bef4b16b2b165b ]
User-provided mount parameter acdirmax of type u32 is intended to have an upper limit, but before it is validated, the value is converted from seconds to jiffies which can lead to an integer overflow.
Found by Linux Verification Center (linuxtesting.org) with SVACE.
--- fs/smb/client/fs_context.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
fs/smb/client/fs_context.c +2 -2
@@ -1273,11 +1273,11 @@ static int smb3_fs_context_parse_param(struct fs_context *fc, ctx->acregmax =HZ * result.uint_32;break ;case Opt_acdirmax: - ctx->acdirmax =HZ * result.uint_32; -if (ctx->acdirmax >CIFS_MAX_ACTIMEO ) { +if (result.uint_32 >CIFS_MAX_ACTIMEO /HZ ) {cifs_errorf (fc,"acdirmax too large\n" ); goto cifs_parse_mount_err; } + ctx->acdirmax =HZ * result.uint_32;break ;case Opt_actimeo:if (HZ * result.uint_32 >CIFS_MAX_ACTIMEO ) {
Signature · 1 line
2.39.5
Greg Kroah-Hartman
maintainerPATCH 149/166 cifs: Fix integer overflow while processing actimeo mount option
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Murad Masimov <[email protected]>
[ Upstream commit 64f690ee22c99e16084e0e45181b2a1eed2fa149 ]
User-provided mount parameter actimeo of type u32 is intended to have an upper limit, but before it is validated, the value is converted from seconds to jiffies which can lead to an integer overflow.
Found by Linux Verification Center (linuxtesting.org) with SVACE.
--- fs/smb/client/fs_context.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
fs/smb/client/fs_context.c +1 -1
@@ -1280,7 +1280,7 @@ static int smb3_fs_context_parse_param(struct fs_context *fc, ctx->acdirmax =HZ * result.uint_32;break ;case Opt_actimeo: -if (HZ * result.uint_32 >CIFS_MAX_ACTIMEO ) { +if (result.uint_32 >CIFS_MAX_ACTIMEO /HZ ) {cifs_errorf (fc,"timeout too large\n" ); goto cifs_parse_mount_err; }
Signature · 1 line
2.39.5
Greg Kroah-Hartman
maintainerPATCH 150/166 cifs: Fix integer overflow while processing closetimeo mount option
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Murad Masimov <[email protected]>
[ Upstream commit d5a30fddfe2f2e540f6c43b59cf701809995faef ]
User-provided mount parameter closetimeo of type u32 is intended to have an upper limit, but before it is validated, the value is converted from seconds to jiffies which can lead to an integer overflow.
Found by Linux Verification Center (linuxtesting.org) with SVACE.
--- fs/smb/client/fs_context.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
fs/smb/client/fs_context.c +2 -2
@@ -1292,11 +1292,11 @@ static int smb3_fs_context_parse_param(struct fs_context *fc, ctx->acdirmax = ctx->acregmax =HZ * result.uint_32;break ;case Opt_closetimeo: - ctx->closetimeo =HZ * result.uint_32; -if (ctx->closetimeo >SMB3_MAX_DCLOSETIMEO ) { +if (result.uint_32 >SMB3_MAX_DCLOSETIMEO /HZ ) {cifs_errorf (fc,"closetimeo too large\n" ); goto cifs_parse_mount_err; } + ctx->closetimeo =HZ * result.uint_32;break ;case Opt_echo_interval: ctx->echo_interval = result.uint_32;
Signature · 1 line
2.39.5
Greg Kroah-Hartman
maintainerPATCH 151/166 cifs: Validate content of WSL reparse point buffers
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Pali Rohár <[email protected]>
[ Upstream commit 1f48660667efb97c3cf70485c7e1977af718b48b ]
WSL socket, fifo, char and block devices have empty reparse buffer. Validate the length of the reparse buffer.
Stable-dep-of: cad3fc0a4c8c ("cifs: Throw -EOPNOTSUPP error on unsupported reparse point type from parse_reparse_point()")
--- fs/smb/client/reparse.c | 5 +++++ 1 file changed, 5 insertions(+)
fs/smb/client/reparse.c +5 -0
@@ -651,6 +651,11 @@ int parse_reparse_point(struct reparse_data_buffer *buf,case IO_REPARSE_TAG_LX_FIFO :case IO_REPARSE_TAG_LX_CHR :case IO_REPARSE_TAG_LX_BLK : +if (le16_to_cpu (buf->ReparseDataLength) !=0 ) { +cifs_dbg (VFS ,"srv returned malformed buffer for reparse point: 0x%08x\n" , +le32_to_cpu (buf->ReparseTag)); +return -EIO ; + }break ;default : cifs_tcon_dbg(VFS | ONCE, "unhandled reparse tag: 0x%08x\n",
Signature · 1 line
2.39.5
Greg Kroah-Hartman
maintainerPATCH 152/166 cifs: Throw -EOPNOTSUPP error on unsupported reparse point type from parse_reparse_point()
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Pali Rohár <[email protected]>
[ Upstream commit cad3fc0a4c8cef07b07ceddc137f582267577250 ]
This would help to track and detect by caller if the reparse point type was processed or not.
--- fs/smb/client/reparse.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-)
fs/smb/client/reparse.c +2 -3
@@ -656,13 +656,12 @@ int parse_reparse_point(struct reparse_data_buffer *buf, le32_to_cpu(buf->ReparseTag));return -EIO ; } -break ; +return 0 ;default :cifs_tcon_dbg (VFS |ONCE ,"unhandled reparse tag: 0x%08x\n" ,le32_to_cpu (buf->ReparseTag)); -break ; +return -EOPNOTSUPP ; } -return 0 ; } int smb2_parse_reparse_point(struct cifs_sb_info *cifs_sb,
Signature · 1 line
2.39.5
Greg Kroah-Hartman
maintainerPATCH 153/166 i2c: ali1535: Fix an error handling path in ali1535_probe()
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christophe JAILLET <[email protected]>
[ Upstream commit 9b5463f349d019a261f1e80803447efca3126151 ]
If i2c_add_adapter() fails, the request_region() call in ali1535_setup() must be undone by a corresponding release_region() call, as done in the remove function.
--- drivers/i2c/busses/i2c-ali1535.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-)
drivers/i2c/busses/i2c-ali1535.c +11 -1
@@ -490,6 +490,8 @@ MODULE_DEVICE_TABLE(pci, ali1535_ids);static int ali1535_probe (struct pci_dev *dev,const struct pci_device_id *id) { +int ret; +if (ali1535_setup (dev)) {dev_warn (&dev->dev,"ALI1535 not detected, module not inserted.\n" );
@@ -501,7 +503,15 @@ static int ali1535_probe(struct pci_dev *dev, const struct pci_device_id *id)snprintf (ali1535_adapter.name,sizeof (ali1535_adapter.name),"SMBus ALI1535 adapter at %04x" , ali1535_offset); -return i2c_add_adapter (&ali1535_adapter); + ret =i2c_add_adapter (&ali1535_adapter); +if (ret) + goto release_region; + +return 0 ; + +release_region: +release_region (ali1535_smba,ALI1535_SMB_IOSIZE ); +return ret; }static void ali1535_remove (struct pci_dev *dev)
Signature · 1 line
2.39.5
Greg Kroah-Hartman
maintainerPATCH 154/166 i2c: ali15x3: Fix an error handling path in ali15x3_probe()
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christophe JAILLET <[email protected]>
[ Upstream commit 6e55caaf30c88209d097e575a169b1dface1ab69 ]
If i2c_add_adapter() fails, the request_region() call in ali15x3_setup() must be undone by a corresponding release_region() call, as done in the remove function.
--- drivers/i2c/busses/i2c-ali15x3.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-)
drivers/i2c/busses/i2c-ali15x3.c +11 -1
@@ -474,6 +474,8 @@ MODULE_DEVICE_TABLE (pci, ali15x3_ids);static int ali15x3_probe (struct pci_dev *dev,const struct pci_device_id *id) { +int ret; +if (ali15x3_setup (dev)) {dev_err (&dev->dev,"ALI15X3 not detected, module not inserted.\n" );
@@ -485,7 +487,15 @@ static int ali15x3_probe(struct pci_dev *dev, const struct pci_device_id *id)snprintf (ali15x3_adapter.name,sizeof (ali15x3_adapter.name),"SMBus ALI15X3 adapter at %04x" , ali15x3_smba); -return i2c_add_adapter (&ali15x3_adapter); + ret =i2c_add_adapter (&ali15x3_adapter); +if (ret) + goto release_region; + +return 0 ; + +release_region: +release_region (ali15x3_smba,ALI15X3_SMB_IOSIZE ); +return ret; }static void ali15x3_remove (struct pci_dev *dev)
Signature · 1 line
2.39.5
Greg Kroah-Hartman
maintainerPATCH 155/166 i2c: sis630: Fix an error handling path in sis630_probe()
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christophe JAILLET <[email protected]>
[ Upstream commit 2b22459792fcb4def9f0936d64575ac11a95a58d ]
If i2c_add_adapter() fails, the request_region() call in sis630_setup() must be undone by a corresponding release_region() call, as done in the remove function.
--- drivers/i2c/busses/i2c-sis630.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-)
drivers/i2c/busses/i2c-sis630.c +11 -1
@@ -509,6 +509,8 @@ MODULE_DEVICE_TABLE(pci, sis630_ids);static int sis630_probe (struct pci_dev *dev,const struct pci_device_id *id) { +int ret; +if (sis630_setup (dev)) {dev_err (&dev->dev, "SIS630 compatible bus not detected, "
@@ -522,7 +524,15 @@ static int sis630_probe(struct pci_dev *dev, const struct pci_device_id *id)snprintf (sis630_adapter.name,sizeof (sis630_adapter.name),"SMBus SIS630 adapter at %04x" , smbus_base +SMB_STS ); -return i2c_add_adapter (&sis630_adapter); + ret =i2c_add_adapter (&sis630_adapter); +if (ret) + goto release_region; + +return 0 ; + +release_region: +release_region (smbus_base +SMB_STS ,SIS630_SMB_IOREGION ); +return ret; }static void sis630_remove (struct pci_dev *dev)
Signature · 1 line
2.39.5
Greg Kroah-Hartman
maintainerPATCH 156/166 stmmac: loongson: Pass correct arg to PCI function
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Philipp Stanner <[email protected]>
[ Upstream commit 00371a3f48775967950c2fe3ec97b7c786ca956d ]
pcim_iomap_regions() should receive the driver's name as its third parameter, not the PCI device's name.
Define the driver name with a macro and use it at the appropriate places, including pcim_iomap_regions().
--- drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c +5 -2
@@ -9,7 +9,10 @@#include <linux/of_irq.h> #include "stmmac.h" +#define DRIVER_NAME "dwmac-loongson-pci" +static int loongson_default_data (struct plat_stmmacenet_data *plat) + { plat->clk_csr =2 ;/* clk_csr_i = 20-35MHz & MDC = clk_csr_i/16 */ plat->has_gmac =1 ;
@@ -95,7 +98,7 @@ static int loongson_dwmac_probe(struct pci_dev *pdev, const struct pci_device_idfor (i =0 ; i <PCI_STD_NUM_BARS ; i++) {if (pci_resource_len (pdev, i) ==0 )continue ; - ret =pcim_iomap_regions (pdev,BIT (0 ),pci_name (pdev)); + ret =pcim_iomap_regions (pdev,BIT (0 ),DRIVER_NAME );if (ret) goto err_disable_device;break ;
@@ -222,7 +225,7 @@ static const struct pci_device_id loongson_dwmac_id_table[] = {MODULE_DEVICE_TABLE (pci, loongson_dwmac_id_table);static struct pci_driver loongson_dwmac_driver = { - .name ="dwmac-loongson-pci" , + .name =DRIVER_NAME , .id_table = loongson_dwmac_id_table, .probe = loongson_dwmac_probe, .remove = loongson_dwmac_remove,
Signature · 1 line
2.39.5
Greg Kroah-Hartman
maintainerPATCH 157/166 smb3: add support for IAKerb
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Steve French <[email protected]>
[ Upstream commit eea5119fa5979c350af5783a8148eacdd4219715 ]
There are now more servers which advertise support for IAKerb (passthrough Kerberos authentication via proxy). IAKerb is a public extension industry standard Kerberos protocol that allows a client without line-of-sight to a Domain Controller to authenticate. There can be cases where we would fail to mount if the server only advertises the OID for IAKerb in SPNEGO/GSSAPI. Add code to allow us to still upcall to userspace in these cases to obtain the Kerberos ticket.
Stable-dep-of: 605b249ea967 ("smb: client: Fix match_session bug preventing session reuse")
--- fs/smb/client/asn1.c | 2 ++ fs/smb/client/cifs_spnego.c | 4 +++- fs/smb/client/cifsglob.h | 4 ++++ fs/smb/client/sess.c | 3 ++- fs/smb/client/smb2pdu.c | 2 +- 5 files changed, 12 insertions(+), 3 deletions(-)
fs/smb/client/asn1.c +2 -0
@@ -52,6 +52,8 @@ int cifs_neg_token_init_mech_type(void *context, size_t hdrlen, server->sec_kerberos = true; else if (oid == OID_ntlmssp) server->sec_ntlmssp = true; + else if (oid == OID_IAKerb) + server->sec_iakerb = true; else {char buf[50 ];
fs/smb/client/cifs_spnego.c +3 -1
@@ -130,11 +130,13 @@ cifs_get_spnego_key(struct cifs_ses *sesInfo, dp = description +strlen (description); -/* for now, only sec=krb5 and sec=mskrb5 are valid */ +/* for now, only sec=krb5 and sec=mskrb5 and iakerb are valid */ if (server->sec_kerberos)sprintf (dp,";sec=krb5" );else if (server->sec_mskerberos)sprintf (dp,";sec=mskrb5" ); +else if (server->sec_iakerb) +sprintf (dp,";sec=iakerb" );else {cifs_dbg (VFS ,"unknown or missing server auth type, use krb5\n" );sprintf (dp,";sec=krb5" );
fs/smb/client/cifsglob.h +4 -0
@@ -151,6 +151,7 @@ enum securityEnum { NTLMv2,/* Legacy NTLM auth with NTLMv2 hash */ RawNTLMSSP,/* NTLMSSP without SPNEGO, NTLMv2 hash */ Kerberos,/* Kerberos via SPNEGO */ + IAKerb, /* Kerberos proxy */ }; enum cifs_reparse_type {
@@ -749,6 +750,7 @@ struct TCP_Server_Info {bool sec_kerberosu2u;/* supports U2U Kerberos */ bool sec_kerberos;/* supports plain Kerberos */ bool sec_mskerberos;/* supports legacy MS Kerberos */ +bool sec_iakerb;/* supports pass-through auth for Kerberos (krb5 proxy) */ bool large_buf;/* is current buffer large? */ /* use SMBD connection instead of socket */ bool rdma;
@@ -2156,6 +2158,8 @@ static inline char *get_security_type_str(enum securityEnum sectype)return "Kerberos" ;case NTLMv2:return "NTLMv2" ; +case IAKerb: +return "IAKerb" ;default :return "Unknown" ; }
fs/smb/client/sess.c +2 -1
@@ -1295,12 +1295,13 @@ cifs_select_sectype(struct TCP_Server_Info *server, enum securityEnum requested)switch (requested) {case Kerberos:case RawNTLMSSP: +case IAKerb:return requested;case Unspecified:if (server->sec_ntlmssp && (global_secflags &CIFSSEC_MAY_NTLMSSP ))return RawNTLMSSP; -if ((server->sec_kerberos || server->sec_mskerberos) && +if ((server->sec_kerberos || server->sec_mskerberos || server->sec_iakerb) && (global_secflags &CIFSSEC_MAY_KRB5 ))return Kerberos; fallthrough;
fs/smb/client/smb2pdu.c +1 -1
@@ -1428,7 +1428,7 @@ smb2_select_sectype(struct TCP_Server_Info *server, enum securityEnum requested)if (server->sec_ntlmssp && (global_secflags &CIFSSEC_MAY_NTLMSSP ))return RawNTLMSSP; -if ((server->sec_kerberos || server->sec_mskerberos) && +if ((server->sec_kerberos || server->sec_mskerberos || server->sec_iakerb) && (global_secflags &CIFSSEC_MAY_KRB5 ))return Kerberos; fallthrough;
Signature · 1 line
2.39.5
Greg Kroah-Hartman
maintainerPATCH 158/166 smb: client: Fix match_session bug preventing session reuse
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Henrique Carvalho <[email protected]>
[ Upstream commit 605b249ea96770ac4fac4b8510a99e0f8442be5e ]
Fix a bug in match_session() that can causes the session to not be reused in some cases.
Reproduction steps:
mount.cifs //server/share /mnt/a -o credentials=creds mount.cifs //server/share /mnt/b -o credentials=creds,sec=ntlmssp cat /proc/fs/cifs/DebugData | grep SessionId | wc -l
mount.cifs //server/share /mnt/b -o credentials=creds,sec=ntlmssp mount.cifs //server/share /mnt/a -o credentials=creds cat /proc/fs/cifs/DebugData | grep SessionId | wc -l
--- fs/smb/client/connect.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-)
fs/smb/client/connect.c +12 -4
@@ -1884,9 +1884,8 @@ cifs_get_tcp_session(struct smb3_fs_context *ctx,/* this function must be called with ses_lock and chan_lock held */ static int match_session (struct cifs_ses *ses,struct smb3_fs_context *ctx) { -if (ctx->sectype != Unspecified && - ctx->sectype != ses->sectype) -return 0 ; +struct TCP_Server_Info *server = ses->server; +enum securityEnum ctx_sec, ses_sec;if (ctx->dfs_root_ses != ses->dfs_root_ses)return 0 ;
@@ -1898,11 +1897,20 @@ static int match_session(struct cifs_ses *ses, struct smb3_fs_context *ctx)if (ses->chan_max < ctx->max_channels)return 0 ; -switch (ses->sectype) { + ctx_sec = server->ops->select_sectype (server, ctx->sectype); + ses_sec = server->ops->select_sectype (server, ses->sectype); + +if (ctx_sec != ses_sec) +return 0 ; + +switch (ctx_sec) { +case IAKerb:case Kerberos:if (!uid_eq (ctx->cred_uid, ses->cred_uid))return 0 ;break ; +case NTLMv2: +case RawNTLMSSP:default :/* NULL username means anonymous session */ if (ses->user_name ==NULL ) {
Signature · 1 line
2.39.5
Greg Kroah-Hartman
maintainerPATCH 159/166 Bluetooth: L2CAP: Fix corrupted list in hci_chan_del
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Luiz Augusto von Dentz <[email protected]>
commit ab4eedb790cae44313759b50fe47da285e2519d5 upstream.
This fixes the following trace by reworking the locking of l2cap_conn so instead of only locking when changing the chan_l list this promotes chan_lock to a general lock of l2cap_conn so whenever it is being held it would prevents the likes of l2cap_conn_del to run:
list_del corruption, ffff888021297e00->prev is LIST_POISON2 (dead000000000122)
------------[ cut here ]------------ kernel BUG at lib/list_debug.c:61! Oops: invalid opcode: 0000 [#1] PREEMPT SMP KASAN PTI CPU: 1 UID: 0 PID: 5896 Comm: syz-executor213 Not tainted 6.14.0-rc1-next-20250204-syzkaller #0 Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 12/27/2024 RIP: 0010:__list_del_entry_valid_or_report+0x12c/0x190 lib/list_debug.c:59 Code: 8c 4c 89 fe 48 89 da e8 32 8c 37 fc 90 0f 0b 48 89 df e8 27 9f 14 fd 48 c7 c7 a0 c0 60 8c 4c 89 fe 48 89 da e8 15 8c 37 fc 90 <0f> 0b 4c 89 e7 e8 0a 9f 14 fd 42 80 3c 2b 00 74 08 4c 89 e7 e8 cb RSP: 0018:ffffc90003f6f998 EFLAGS: 00010246 RAX: 000000000000004e RBX: dead000000000122 RCX: 01454d423f7fbf00 RDX: 0000000000000000 RSI: 0000000080000000 RDI: 0000000000000000 RBP: dffffc0000000000 R08: ffffffff819f077c R09: 1ffff920007eded0 R10: dffffc0000000000 R11: fffff520007eded1 R12: dead000000000122 R13: dffffc0000000000 R14: ffff8880352248d8 R15: ffff888021297e00 FS: 00007f7ace6686c0(0000) GS:ffff8880b8700000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 00007f7aceeeb1d0 CR3: 000000003527c000 CR4: 00000000003526f0 DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 Call Trace: <TASK> __list_del_entry_valid include/linux/list.h:124 [inline] __list_del_entry include/linux/list.h:215 [inline] list_del_rcu include/linux/rculist.h:168 [inline] hci_chan_del+0x70/0x1b0 net/bluetooth/hci_conn.c:2858 l2cap_conn_free net/bluetooth/l2cap_core.c:1816 [inline] kref_put include/linux/kref.h:65 [inline] l2cap_conn_put+0x70/0xe0 net/bluetooth/l2cap_core.c:1830 l2cap_sock_shutdown+0xa8a/0x1020 net/bluetooth/l2cap_sock.c:1377 l2cap_sock_release+0x79/0x1d0 net/bluetooth/l2cap_sock.c:1416 __sock_release net/socket.c:642 [inline] sock_close+0xbc/0x240 net/socket.c:1393 __fput+0x3e9/0x9f0 fs/file_table.c:448 task_work_run+0x24f/0x310 kernel/task_work.c:227 ptrace_notify+0x2d2/0x380 kernel/signal.c:2522 ptrace_report_syscall include/linux/ptrace.h:415 [inline] ptrace_report_syscall_exit include/linux/ptrace.h:477 [inline] syscall_exit_work+0xc7/0x1d0 kernel/entry/common.c:173 syscall_exit_to_user_mode_prepare kernel/entry/common.c:200 [inline] __syscall_exit_to_user_mode_work kernel/entry/common.c:205 [inline] syscall_exit_to_user_mode+0x24a/0x340 kernel/entry/common.c:218 do_syscall_64+0x100/0x230 arch/x86/entry/common.c:89 entry_SYSCALL_64_after_hwframe+0x77/0x7f RIP: 0033:0x7f7aceeaf449 Code: 28 00 00 00 75 05 48 83 c4 28 c3 e8 41 19 00 00 90 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 b0 ff ff ff f7 d8 64 89 01 48 RSP: 002b:00007f7ace668218 EFLAGS: 00000246 ORIG_RAX: 000000000000002a RAX: fffffffffffffffc RBX: 00007f7acef39328 RCX: 00007f7aceeaf449 RDX: 000000000000000e RSI: 0000000020000100 RDI: 0000000000000004 RBP: 00007f7acef39320 R08: 0000000000000000 R09: 0000000000000000 R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000003 R13: 0000000000000004 R14: 00007f7ace668670 R15: 000000000000000b </TASK> Modules linked in: ---[ end trace 0000000000000000 ]--- RIP: 0010:__list_del_entry_valid_or_report+0x12c/0x190 lib/list_debug.c:59 Code: 8c 4c 89 fe 48 89 da e8 32 8c 37 fc 90 0f 0b 48 89 df e8 27 9f 14 fd 48 c7 c7 a0 c0 60 8c 4c 89 fe 48 89 da e8 15 8c 37 fc 90 <0f> 0b 4c 89 e7 e8 0a 9f 14 fd 42 80 3c 2b 00 74 08 4c 89 e7 e8 cb RSP: 0018:ffffc90003f6f998 EFLAGS: 00010246 RAX: 000000000000004e RBX: dead000000000122 RCX: 01454d423f7fbf00 RDX: 0000000000000000 RSI: 0000000080000000 RDI: 0000000000000000 RBP: dffffc0000000000 R08: ffffffff819f077c R09: 1ffff920007eded0 R10: dffffc0000000000 R11: fffff520007eded1 R12: dead000000000122 R13: dffffc0000000000 R14: ffff8880352248d8 R15: ffff888021297e00 FS: 00007f7ace6686c0(0000) GS:ffff8880b8600000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 00007f7acef05b08 CR3: 000000003527c000 CR4: 00000000003526f0 DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
--- include/net/bluetooth/l2cap.h | 3 net/bluetooth/l2cap_core.c | 138 ++++++++++++++---------------------------- net/bluetooth/l2cap_sock.c | 15 ++-- 3 files changed, 58 insertions(+), 98 deletions(-)
include/net/bluetooth/l2cap.h +2 -1
@@ -662,7 +662,7 @@ struct l2cap_conn {struct l2cap_chan *smp;struct list_head chan_l; -struct mutex chan_lock; +struct mutex lock;struct kref ref;struct list_head users; };
@@ -968,6 +968,7 @@ void l2cap_logical_cfm(struct l2cap_chanvoid __l2cap_physical_cfm (struct l2cap_chan *chan,int result);struct l2cap_conn *l2cap_conn_get (struct l2cap_conn *conn); +struct l2cap_conn *l2cap_conn_hold_unless_zero (struct l2cap_conn *conn);void l2cap_conn_put (struct l2cap_conn *conn);int l2cap_register_user (struct l2cap_conn *conn,struct l2cap_user *user);
net/bluetooth/l2cap_core.c +49 -89
455 lines not on this page · raw message
net/bluetooth/l2cap_sock.c +7 -8
@@ -1323,9 +1323,10 @@ static int l2cap_sock_shutdown(struct so/* prevent sk structure from being freed whilst unlocked */ sock_hold (sk); - chan =l2cap_pi (sk)->chan;/* prevent chan structure from being freed whilst unlocked */ -l2cap_chan_hold (chan); + chan =l2cap_chan_hold_unless_zero (l2cap_pi (sk)->chan); +if (!chan) + goto shutdown_already;BT_DBG ("chan %p state %s" , chan,state_to_string (chan->state));
@@ -1355,22 +1356,20 @@ static int l2cap_sock_shutdown(struct sorelease_sock (sk);l2cap_chan_lock (chan); - conn = chan->conn; -if (conn) -/* prevent conn structure from being freed */ -l2cap_conn_get (conn); +/* prevent conn structure from being freed */ + conn =l2cap_conn_hold_unless_zero (chan->conn);l2cap_chan_unlock (chan);if (conn)/* mutex lock must be taken before l2cap_chan_lock() */ -mutex_lock (&conn->chan_lock); +mutex_lock (&conn->lock);l2cap_chan_lock (chan);l2cap_chan_close (chan,0 );l2cap_chan_unlock (chan);if (conn) { -mutex_unlock (&conn->chan_lock); +mutex_unlock (&conn->lock);l2cap_conn_put (conn); }
Greg Kroah-Hartman
maintainerPATCH 160/166 nvme-fc: rely on state transitions to handle connectivity loss
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Daniel Wagner <[email protected]>
commit f13409bb3f9140dad7256febcb478f0c9600312c upstream.
It's not possible to call nvme_state_ctrl_state with holding a spin lock, because nvme_state_ctrl_state calls cancel_delayed_work_sync when fastfail is enabled.
Instead syncing the ASSOC_FLAG and state transitions using a lock, it's possible to only rely on the state machine transitions. That means nvme_fc_ctrl_connectivity_loss should unconditionally call nvme_reset_ctrl which avoids the read race on the ctrl state variable. Actually, it's not necessary to test in which state the ctrl is, the reset work will only scheduled when the state machine is in LIVE state.
In nvme_fc_create_association, the LIVE state can only be entered if it was previously CONNECTING. If this is not possible then the reset handler got triggered. Thus just error out here.
--- drivers/nvme/host/fc.c | 67 ++++--------------------------------------------- 1 file changed, 6 insertions(+), 61 deletions(-)
drivers/nvme/host/fc.c +6 -61
@@ -782,61 +782,12 @@ restart:static void nvme_fc_ctrl_connectivity_loss (struct nvme_fc_ctrl *ctrl) { -enum nvme_ctrl_state state; -unsigned long flags; -dev_info (ctrl->ctrl.device,"NVME-FC{%d}: controller connectivity lost. Awaiting " "Reconnect" , ctrl->cnum); -spin_lock_irqsave (&ctrl->lock, flags);set_bit (ASSOC_FAILED , &ctrl->flags); - state =nvme_ctrl_state (&ctrl->ctrl); -spin_unlock_irqrestore (&ctrl->lock, flags); - -switch (state) { -case NVME_CTRL_NEW : -case NVME_CTRL_LIVE : -/* -* Schedule a controller reset. The reset will terminate the -* association and schedule the reconnect timer. Reconnects -* will be attempted until either the ctlr_loss_tmo -* (max_retries * connect_delay) expires or the remoteport's -* dev_loss_tmo expires. -*/ -if (nvme_reset_ctrl (&ctrl->ctrl)) { -dev_warn (ctrl->ctrl.device, -"NVME-FC{%d}: Couldn't schedule reset.\n" , - ctrl->cnum); -nvme_delete_ctrl (&ctrl->ctrl); - } -break ; - -case NVME_CTRL_CONNECTING : -/* -* The association has already been terminated and the -* controller is attempting reconnects. No need to do anything -* futher. Reconnects will be attempted until either the -* ctlr_loss_tmo (max_retries * connect_delay) expires or the -* remoteport's dev_loss_tmo expires. -*/ -break ; - -case NVME_CTRL_RESETTING : -/* -* Controller is already in the process of terminating the -* association. No need to do anything further. The reconnect -* step will kick in naturally after the association is -* terminated. -*/ -break ; - -case NVME_CTRL_DELETING : -case NVME_CTRL_DELETING_NOIO : -default : -/* no action to take - let it delete */ -break ; - } +nvme_reset_ctrl (&ctrl->ctrl); }/**
@@ -3070,7 +3021,6 @@ nvme_fc_create_association(struct nvme_fstruct nvmefc_ls_rcv_op *disls =NULL ;unsigned long flags;int ret; -bool changed; ++ctrl->ctrl.nr_reconnects;
@@ -3175,23 +3125,18 @@ nvme_fc_create_association(struct nvme_felse ret =nvme_fc_recreate_io_queues (ctrl); } +if (!ret &&test_bit (ASSOC_FAILED , &ctrl->flags)) + ret = -EIO ;if (ret) goto out_term_aen_ops; -spin_lock_irqsave (&ctrl->lock, flags); -if (!test_bit (ASSOC_FAILED , &ctrl->flags)) - changed =nvme_change_ctrl_state (&ctrl->ctrl,NVME_CTRL_LIVE ); -else +if (!nvme_change_ctrl_state (&ctrl->ctrl,NVME_CTRL_LIVE )) { ret = -EIO ; -spin_unlock_irqrestore (&ctrl->lock, flags); - -if (ret) goto out_term_aen_ops; + } ctrl->ctrl.nr_reconnects =0 ; - -if (changed) -nvme_start_ctrl (&ctrl->ctrl); +nvme_start_ctrl (&ctrl->ctrl);return 0 ;/* Success */
Greg Kroah-Hartman
maintainerPATCH 161/166 HID: apple: disable Fn key handling on the Omoton KB066
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alex Henrie <[email protected]>
commit 221cea1003d8a412e5ec64a58df7ab19b654f490 upstream.
Remove the fixup to make the Omoton KB066's F6 key F6 when not holding Fn. That was really just a hack to allow typing F6 in fnmode>0, and it didn't fix any of the other F keys that were likewise untypable in fnmode>0. Instead, because the Omoton's Fn key is entirely internal to the keyboard, completely disable Fn key translation when an Omoton is detected, which will prevent the hid-apple driver from interfering with the keyboard's built-in Fn key handling. All of the F keys, including F6, are then typable when Fn is held.
The Omoton KB066 and the Apple A1255 both have HID product code 05ac:022c. The self-reported name of every original A1255 when they left the factory was "Apple Wireless Keyboard". By default, Mac OS changes the name to "<username>'s keyboard" when pairing with the keyboard, but Mac OS allows the user to set the internal name of Apple keyboards to anything they like. The Omoton KB066's name, on the other hand, is not
configurable: It is always "Bluetooth Keyboard". Because that name is so generic that a user might conceivably use the same name for a real Apple keyboard, detect Omoton keyboards based on both having that exact name and having HID product code 022c.
--- drivers/hid/hid-apple.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-)
drivers/hid/hid-apple.c +7 -4
@@ -363,6 +363,12 @@ static bool apple_is_non_apple_keyboard(return false; } +static bool apple_is_omoton_kb066 (struct hid_device *hdev) +{ +return hdev->product ==USB_DEVICE_ID_APPLE_ALU_WIRELESS_ANSI && +strcmp (hdev->name,"Bluetooth Keyboard" ) ==0 ; +} +static inline void apple_setup_key_translation (struct input_dev *input,const struct apple_key_translation *table) {
@@ -531,9 +537,6 @@ static int hidinput_apple_event(struct h } } -if (usage->hid ==0xc0301 )/* Omoton KB066 quirk */ - code =KEY_F6 ; -if (usage->code != code) {input_event_with_scancode (input, usage->type, code, usage->hid, value);
@@ -713,7 +716,7 @@ static int apple_input_configured(struct {struct apple_sc *asc =hid_get_drvdata (hdev); -if ((asc->quirks &APPLE_HAS_FN ) && !asc->fn_found) { +if (((asc->quirks &APPLE_HAS_FN ) && !asc->fn_found) ||apple_is_omoton_kb066 (hdev)) {hid_info (hdev,"Fn key not found (Apple Wireless Keyboard clone?), disabling Fn key handling\n" ); asc->quirks &= ~APPLE_HAS_FN ; }
Greg Kroah-Hartman
maintainerPATCH 162/166 nvme-tcp: Fix a C2HTermReq error message
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Maurizio Lombardi <[email protected]>
commit afb41b08c44e5386f2f52fa859010ac4afd2b66f upstream.
In H2CTermReq, a FES with value 0x05 means "R2T Limit Exceeded"; but in C2HTermReq the same value has a different meaning (Data Transfer Limit Exceeded).
--- drivers/nvme/host/tcp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/nvme/host/tcp.c +1 -1
@@ -719,7 +719,7 @@ static void nvme_tcp_handle_c2h_term(str [NVME_TCP_FES_PDU_SEQ_ERR] = "PDU Sequence Error", [NVME_TCP_FES_HDR_DIGEST_ERR] = "Header Digest Error", [NVME_TCP_FES_DATA_OUT_OF_RANGE] = "Data Transfer Out Of Range", - [NVME_TCP_FES_R2T_LIMIT_EXCEEDED] = "R2T Limit Exceeded", + [NVME_TCP_FES_DATA_LIMIT_EXCEEDED] = "Data Transfer Limit Exceeded", [NVME_TCP_FES_UNSUPPORTED_PARAM] = "Unsupported Parameter", };
Greg Kroah-Hartman
maintainerPATCH 163/166 rust: lockdep: Remove support for dynamically allocated LockClassKeys
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mitchell Levy <[email protected]>
commit 966944f3711665db13e214fef6d02982c49bb972 upstream.
Currently, dynamically allocated LockCLassKeys can be used from the Rust side without having them registered. This is a soundness issue, so remove them.
--- rust/kernel/sync.rs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-)
rust/kernel/sync.rs +4 -6
@@ -26,11 +26,6 @@ pub struct LockClassKey(Opaque<bindings:unsafe impl Sync for LockClassKey {}impl LockClassKey { -/// Creates a new lock class key. -pub const fn new () ->Self { -Self (Opaque ::uninit ()) - } -pub (crate )fn as_ptr (&self) -> *mut bindings::lock_class_key { self.0 .get () }
@@ -41,7 +36,10 @@ impl LockClassKey {#[macro_export] macro_rules! static_lock_class { () => {{ -static CLASS : $crate::sync::LockClassKey = $crate::sync::LockClassKey ::new (); +static CLASS : $crate::sync::LockClassKey = +// SAFETY: lockdep expects uninitialized memory when it's handed a statically allocated +// lock_class_key +unsafe { ::core::mem::MaybeUninit ::uninit ().assume_init () }; &CLASS }}; }
Greg Kroah-Hartman
maintainerPATCH 164/166 netfilter: nf_tables: use timestamp to check for set element timeout
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Pablo Neira Ayuso <[email protected]>
commit 7395dfacfff65e9938ac0889dafa1ab01e987d15 upstream.
Add a timestamp field at the beginning of the transaction, store it in the nftables per-netns area.
Update set backend .insert, .deactivate and sync gc path to use the timestamp, this avoids that an element expires while control plane transaction is still unfinished.
.lookup and .update, which are used from packet path, still use the current time to check if the element has expired. And .get path and dump also since this runs lockless under rcu read size lock. Then, there is async gc which also needs to check the current time since it runs asynchronously from a workqueue.
--- include/net/netfilter/nf_tables.h | 16 ++++++++++++++-- net/netfilter/nf_tables_api.c | 4 +++- net/netfilter/nft_set_hash.c | 8 +++++++- net/netfilter/nft_set_pipapo.c | 18 +++++++++++------- net/netfilter/nft_set_rbtree.c | 11 +++++++---- 5 files changed, 42 insertions(+), 15 deletions(-)
include/net/netfilter/nf_tables.h +14 -2
@@ -826,10 +826,16 @@ static inline struct nft_set_elem_expr *return nft_set_ext (ext,NFT_SET_EXT_EXPRESSIONS ); } -static inline bool nft_set_elem_expired (const struct nft_set_ext *ext) +static inline bool __nft_set_elem_expired (const struct nft_set_ext *ext, +u64 tstamp) {return nft_set_ext_exists (ext,NFT_SET_EXT_EXPIRATION ) && -time_is_before_eq_jiffies64 (*nft_set_ext_expiration (ext)); +time_after_eq64 (tstamp, *nft_set_ext_expiration (ext)); +} + +static inline bool nft_set_elem_expired (const struct nft_set_ext *ext) +{ +return __nft_set_elem_expired (ext,get_jiffies_64 ()); } static inline struct nft_set_ext *nft_set_elem_ext(const struct nft_set *set,
@@ -1791,6 +1797,7 @@ struct nftables_pernet {struct list_head notify_list;struct mutex commit_mutex;u64 table_handle; +u64 tstamp;unsigned int base_seq;unsigned int gc_seq;u8 validate_state;
@@ -1803,6 +1810,11 @@ static inline struct nftables_pernet *nfreturn net_generic (net, nf_tables_net_id); } +static inline u64 nft_net_tstamp (const struct net *net) +{ +return nft_pernet (net)->tstamp; +} +#define __NFT_REDUCE_READONLY 1UL#define NFT_REDUCE_READONLY (void *)__NFT_REDUCE_READONLY
net/netfilter/nf_tables_api.c +3 -1
@@ -9963,6 +9963,7 @@ dead_elem:struct nft_trans_gc *nft_trans_gc_catchall_sync (struct nft_trans_gc *gc) {struct nft_set_elem_catchall *catchall, *next; +u64 tstamp =nft_net_tstamp (gc->net);const struct nft_set *set = gc->set;struct nft_set_elem elem;struct nft_set_ext *ext;
@@ -9972,7 +9973,7 @@ struct nft_trans_gc *nft_trans_gc_catchalist_for_each_entry_safe (catchall, next, &set->catchall_list, list) { ext =nft_set_elem_ext (set, catchall->elem); -if (!nft_set_elem_expired (ext)) +if (!__nft_set_elem_expired (ext, tstamp))continue ; gc =nft_trans_gc_queue_sync (gc,GFP_KERNEL );
@@ -10777,6 +10778,7 @@ static bool nf_tables_valid_genid(structbool genid_ok;mutex_lock (&nft_net->commit_mutex); + nft_net->tstamp =get_jiffies_64 (); genid_ok = genid ==0 || nft_net->base_seq == genid;if (!genid_ok)
net/netfilter/nft_set_hash.c +7 -1
@@ -37,6 +37,7 @@ struct nft_rhash_cmp_arg {const struct nft_set *set;const u32 *key;u8 genmask; +u64 tstamp; };static inline u32 nft_rhash_key (const void *data,u32 len,u32 seed)
@@ -63,7 +64,7 @@ static inline int nft_rhash_cmp(struct rreturn 1 ;if (nft_set_elem_is_dead (&he->ext))return 1 ; -if (nft_set_elem_expired (&he->ext)) +if (__nft_set_elem_expired (&he->ext, x->tstamp))return 1 ;if (!nft_set_elem_active (&he->ext, x->genmask))return 1 ;
@@ -88,6 +89,7 @@ bool nft_rhash_lookup(const struct net * .genmask = nft_genmask_cur(net), .set = set, .key = key, + .tstamp = get_jiffies_64(), }; he =rhashtable_lookup (&priv->ht, &arg, nft_rhash_params);
@@ -106,6 +108,7 @@ static void *nft_rhash_get(const struct .genmask = nft_genmask_cur(net), .set = set, .key = elem->key.val.data, + .tstamp = get_jiffies_64(), }; he =rhashtable_lookup (&priv->ht, &arg, nft_rhash_params);
@@ -129,6 +132,7 @@ static bool nft_rhash_update(struct nft_ .genmask = NFT_GENMASK_ANY, .set = set, .key = key, + .tstamp = get_jiffies_64(), }; he =rhashtable_lookup (&priv->ht, &arg, nft_rhash_params);
@@ -172,6 +176,7 @@ static int nft_rhash_insert(const struct .genmask = nft_genmask_next(net), .set = set, .key = elem->key.val.data, + .tstamp = nft_net_tstamp(net), };struct nft_rhash_elem *prev;
@@ -214,6 +219,7 @@ static void *nft_rhash_deactivate(const .genmask = nft_genmask_next(net), .set = set, .key = elem->key.val.data, + .tstamp = nft_net_tstamp(net), };rcu_read_lock ();
net/netfilter/nft_set_pipapo.c +11 -7
@@ -504,6 +504,7 @@ out:* @set: nftables API set representation * @data: Key data to be matched against existing elements * @genmask: If set, check that element is active in given genmask +* @tstamp: timestamp to check for expired elements * * This is essentially the same as the lookup function, except that it matches * key data against the uncommitted copy and doesn't use preallocated maps for
@@ -513,7 +514,8 @@ out:*/ static struct nft_pipapo_elem *pipapo_get (const struct net *net,const struct nft_set *set, -const u8 *data,u8 genmask) +const u8 *data,u8 genmask, +u64 tstamp) {struct nft_pipapo_elem *ret =ERR_PTR (-ENOENT );struct nft_pipapo *priv =nft_set_priv (set);
@@ -568,7 +570,7 @@ next_match: goto out;if (last) { -if (nft_set_elem_expired (&f->mt[b].e->ext)) +if (__nft_set_elem_expired (&f->mt[b].e->ext, tstamp)) goto next_match;if ((genmask && !nft_set_elem_active (&f->mt[b].e->ext, genmask)))
@@ -605,7 +607,7 @@ static void *nft_pipapo_get(const struct const struct nft_set_elem *elem, unsigned int flags) { return pipapo_get(net, set, (const u8 *)elem->key.val.data, - nft_genmask_cur(net)); + nft_genmask_cur(net), get_jiffies_64()); }/**
@@ -1199,6 +1201,7 @@ static int nft_pipapo_insert(const strucstruct nft_pipapo *priv =nft_set_priv (set);struct nft_pipapo_match *m = priv->clone;u8 genmask =nft_genmask_next (net); +u64 tstamp =nft_net_tstamp (net);struct nft_pipapo_field *f;const u8 *start_p, *end_p;int i, bsize_max, err =0 ;
@@ -1208,7 +1211,7 @@ static int nft_pipapo_insert(const strucelse end = start; - dup =pipapo_get (net, set, start, genmask); + dup =pipapo_get (net, set, start, genmask, tstamp);if (!IS_ERR (dup)) {/* Check if we already have the same exact entry */ const struct nft_data *dup_key, *dup_end;
@@ -1230,7 +1233,7 @@ static int nft_pipapo_insert(const strucif (PTR_ERR (dup) == -ENOENT ) {/* Look for partially overlapping entries */ - dup =pipapo_get (net, set, end,nft_genmask_next (net)); + dup =pipapo_get (net, set, end,nft_genmask_next (net), tstamp); }if (PTR_ERR (dup) != -ENOENT ) {
@@ -1581,6 +1584,7 @@ static void pipapo_gc(struct nft_set *se {struct nft_pipapo *priv =nft_set_priv (set);struct net *net =read_pnet (&set->net); +u64 tstamp =nft_net_tstamp (net);int rules_f0, first_rule =0 ;struct nft_pipapo_elem *e;struct nft_trans_gc *gc;
@@ -1615,7 +1619,7 @@ static void pipapo_gc(struct nft_set *se/* synchronous gc never fails, there is no need to set on * NFT_SET_ELEM_DEAD_BIT. */ -if (nft_set_elem_expired (&e->ext)) { +if (__nft_set_elem_expired (&e->ext, tstamp)) { priv->dirty = true; gc =nft_trans_gc_queue_sync (gc,GFP_ATOMIC );
@@ -1786,7 +1790,7 @@ static void *pipapo_deactivate(const str {struct nft_pipapo_elem *e; - e =pipapo_get (net, set, data,nft_genmask_next (net)); + e =pipapo_get (net, set, data,nft_genmask_next (net),nft_net_tstamp (net));if (IS_ERR (e))return NULL ;
net/netfilter/nft_set_rbtree.c +7 -4
@@ -314,6 +314,7 @@ static int __nft_rbtree_insert(const strstruct nft_rbtree *priv =nft_set_priv (set);u8 cur_genmask =nft_genmask_cur (net);u8 genmask =nft_genmask_next (net); +u64 tstamp =nft_net_tstamp (net);int d;/* Descend the tree to search for an existing element greater than the
@@ -361,7 +362,7 @@ static int __nft_rbtree_insert(const str/* perform garbage collection to avoid bogus overlap reports * but skip new elements in this transaction. */ -if (nft_set_elem_expired (&rbe->ext) && +if (__nft_set_elem_expired (&rbe->ext, tstamp) &&nft_set_elem_active (&rbe->ext, cur_genmask)) {const struct nft_rbtree_elem *removed_end;
@@ -553,6 +554,7 @@ static void *nft_rbtree_deactivate(constconst struct rb_node *parent = priv->root.rb_node;struct nft_rbtree_elem *rbe, *this = elem->priv;u8 genmask =nft_genmask_next (net); +u64 tstamp =nft_net_tstamp (net);int d;while (parent !=NULL ) {
@@ -573,7 +575,7 @@ static void *nft_rbtree_deactivate(const nft_rbtree_interval_end(this)) { parent = parent->rb_right;continue ; - } else if (nft_set_elem_expired(&rbe->ext)) { + } else if (__nft_set_elem_expired(&rbe->ext, tstamp)) {break ; } else if (!nft_set_elem_active(&rbe->ext, genmask)) { parent = parent->rb_left;
@@ -632,9 +634,10 @@ static void nft_rbtree_gc(struct nft_setstruct nft_rbtree *priv =nft_set_priv (set);struct nft_rbtree_elem *rbe, *rbe_end =NULL ;struct nftables_pernet *nft_net; +struct net *net =read_pnet (&set->net); +u64 tstamp =nft_net_tstamp (net);struct rb_node *node, *next;struct nft_trans_gc *gc; -struct net *net; set =nft_set_container_of (priv); net =read_pnet (&set->net);
@@ -657,7 +660,7 @@ static void nft_rbtree_gc(struct nft_set rbe_end = rbe;continue ; } -if (!nft_set_elem_expired (&rbe->ext)) +if (!__nft_set_elem_expired (&rbe->ext, tstamp))continue ; gc =nft_trans_gc_queue_sync (gc,GFP_KERNEL );
Greg Kroah-Hartman
maintainerPATCH 165/166 netfilter: nf_tables: bail out if stateful expression provides no .clone
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Pablo Neira Ayuso <[email protected]>
commit 3c13725f43dcf43ad8a9bcd6a9f12add19a8f93e upstream.
All existing NFT_EXPR_STATEFUL provide a .clone interface, remove fallback to copy content of stateful expression since this is never exercised and bail out if .clone interface is not defined.
Stable-dep-of: fa23e0d4b756 ("netfilter: nf_tables: allow clone callbacks to sleep")
--- net/netfilter/nf_tables_api.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-)
net/netfilter/nf_tables_api.c +7 -8
@@ -3336,14 +3336,13 @@ int nft_expr_clone(struct nft_expr *dst, {int err; -if (src->ops->clone) { - dst->ops = src->ops; - err = src->ops->clone (dst, src); -if (err <0 ) -return err; - }else { -memcpy (dst, src, src->ops->size); - } +if (WARN_ON_ONCE (!src->ops->clone)) +return -EINVAL ; + + dst->ops = src->ops; + err = src->ops->clone (dst, src); +if (err <0 ) +return err;__module_get (src->ops->type->owner);
Greg Kroah-Hartman
maintainerPATCH 166/166 netfilter: nf_tables: allow clone callbacks to sleep
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Florian Westphal <[email protected]>
commit fa23e0d4b756d25829e124d6b670a4c6bbd4bf7e upstream.
Sven Auhagen reports transaction failures with following error:
./main.nft:13:1-26: Error: Could not process rule: Cannot allocate memory
percpu: allocation failed, size=16 align=8 atomic=1, atomic alloc failed, no space left
This points to failing pcpu allocation with GFP_ATOMIC flag. However, transactions happen from user context and are allowed to sleep.
One case where we can call into percpu allocator with GFP_ATOMIC is nft_counter expression.
Normally this happens from control plane, so this could use GFP_KERNEL instead. But one use case, element insertion from packet path, needs to use GFP_ATOMIC allocations (nft_dynset expression).
At this time, .clone callbacks always use GFP_ATOMIC for this reason.
Add gfp_t argument to the .clone function and pass GFP_KERNEL or GFP_ATOMIC flag depending on context, this allows all clone memory allocations to sleep for the normal (transaction) case.
--- include/net/netfilter/nf_tables.h | 4 ++-- net/netfilter/nf_tables_api.c | 8 ++++---- net/netfilter/nft_connlimit.c | 4 ++-- net/netfilter/nft_counter.c | 4 ++-- net/netfilter/nft_dynset.c | 2 +- net/netfilter/nft_last.c | 4 ++-- net/netfilter/nft_limit.c | 14 ++++++++------ net/netfilter/nft_quota.c | 4 ++-- 8 files changed, 23 insertions(+), 21 deletions(-)
include/net/netfilter/nf_tables.h +2 -2
@@ -407,7 +407,7 @@ struct nft_expr_info;int nft_expr_inner_parse (const struct nft_ctx *ctx,const struct nlattr *nla,struct nft_expr_info *info); -int nft_expr_clone (struct nft_expr *dst,struct nft_expr *src); +int nft_expr_clone (struct nft_expr *dst,struct nft_expr *src,gfp_t gfp);void nft_expr_destroy (const struct nft_ctx *ctx,struct nft_expr *expr);int nft_expr_dump (struct sk_buff *skb,unsigned int attr,const struct nft_expr *expr,bool reset);
@@ -936,7 +936,7 @@ struct nft_expr_ops {struct nft_regs *regs, const struct nft_pktinfo *pkt);int (*clone)(struct nft_expr *dst, -const struct nft_expr *src); +const struct nft_expr *src,gfp_t gfp);unsigned int size; int (*init)(const struct nft_ctx *ctx,
net/netfilter/nf_tables_api.c +4 -4
@@ -3332,7 +3332,7 @@ err_expr_parse:return ERR_PTR (err); } -int nft_expr_clone (struct nft_expr *dst,struct nft_expr *src) +int nft_expr_clone (struct nft_expr *dst,struct nft_expr *src,gfp_t gfp) {int err;
@@ -3340,7 +3340,7 @@ int nft_expr_clone(struct nft_expr *dst,return -EINVAL ; dst->ops = src->ops; - err = src->ops->clone (dst, src); + err = src->ops->clone (dst, src, gfp);if (err <0 )return err;
@@ -6457,7 +6457,7 @@ int nft_set_elem_expr_clone(const structif (!expr) goto err_expr; - err =nft_expr_clone (expr, set->exprs[i]); + err =nft_expr_clone (expr, set->exprs[i],GFP_KERNEL_ACCOUNT );if (err <0 ) {kfree (expr); goto err_expr;
@@ -6496,7 +6496,7 @@ static int nft_set_elem_expr_setup(strucfor (i =0 ; i < num_exprs; i++) { expr =nft_setelem_expr_at (elem_expr, elem_expr->size); - err =nft_expr_clone (expr, expr_array[i]); + err =nft_expr_clone (expr, expr_array[i],GFP_KERNEL_ACCOUNT );if (err <0 ) goto err_elem_expr_setup;
net/netfilter/nft_connlimit.c +2 -2
@@ -210,12 +210,12 @@ static void nft_connlimit_destroy(constnft_connlimit_do_destroy (ctx, priv); } -static int nft_connlimit_clone (struct nft_expr *dst,const struct nft_expr *src) +static int nft_connlimit_clone (struct nft_expr *dst,const struct nft_expr *src,gfp_t gfp) {struct nft_connlimit *priv_dst =nft_expr_priv (dst);struct nft_connlimit *priv_src =nft_expr_priv (src); - priv_dst->list =kmalloc (sizeof (*priv_dst->list),GFP_ATOMIC ); + priv_dst->list =kmalloc (sizeof (*priv_dst->list), gfp);if (!priv_dst->list)return -ENOMEM ;
net/netfilter/nft_counter.c +2 -2
@@ -231,7 +231,7 @@ static void nft_counter_destroy(const stnft_counter_do_destroy (priv); } -static int nft_counter_clone (struct nft_expr *dst,const struct nft_expr *src) +static int nft_counter_clone (struct nft_expr *dst,const struct nft_expr *src,gfp_t gfp) {struct nft_counter_percpu_priv *priv =nft_expr_priv (src);struct nft_counter_percpu_priv *priv_clone =nft_expr_priv (dst);
@@ -241,7 +241,7 @@ static int nft_counter_clone(struct nft_nft_counter_fetch (priv, &total); - cpu_stats = alloc_percpu_gfp(struct nft_counter, GFP_ATOMIC); + cpu_stats = alloc_percpu_gfp(struct nft_counter, gfp);if (cpu_stats ==NULL )return -ENOMEM ;
net/netfilter/nft_dynset.c +1 -1
@@ -35,7 +35,7 @@ static int nft_dynset_expr_setup(const sfor (i =0 ; i < priv->num_exprs; i++) { expr =nft_setelem_expr_at (elem_expr, elem_expr->size); -if (nft_expr_clone (expr, priv->expr_array[i]) <0 ) +if (nft_expr_clone (expr, priv->expr_array[i],GFP_ATOMIC ) <0 )return -1 ; elem_expr->size += priv->expr_array[i]->ops->size;
net/netfilter/nft_last.c +2 -2
@@ -102,12 +102,12 @@ static void nft_last_destroy(const struckfree (priv->last); } -static int nft_last_clone (struct nft_expr *dst,const struct nft_expr *src) +static int nft_last_clone (struct nft_expr *dst,const struct nft_expr *src,gfp_t gfp) {struct nft_last_priv *priv_dst =nft_expr_priv (dst);struct nft_last_priv *priv_src =nft_expr_priv (src); - priv_dst->last =kzalloc (sizeof (*priv_dst->last),GFP_ATOMIC ); + priv_dst->last =kzalloc (sizeof (*priv_dst->last), gfp);if (!priv_dst->last)return -ENOMEM ;
net/netfilter/nft_limit.c +8 -6
@@ -150,7 +150,7 @@ static void nft_limit_destroy(const stru }static int nft_limit_clone (struct nft_limit_priv *priv_dst, -const struct nft_limit_priv *priv_src) +const struct nft_limit_priv *priv_src,gfp_t gfp) { priv_dst->tokens_max = priv_src->tokens_max; priv_dst->rate = priv_src->rate;
@@ -158,7 +158,7 @@ static int nft_limit_clone(struct nft_li priv_dst->burst = priv_src->burst; priv_dst->invert = priv_src->invert; - priv_dst->limit =kmalloc (sizeof (*priv_dst->limit),GFP_ATOMIC ); + priv_dst->limit =kmalloc (sizeof (*priv_dst->limit), gfp);if (!priv_dst->limit)return -ENOMEM ;
@@ -223,14 +223,15 @@ static void nft_limit_pkts_destroy(constnft_limit_destroy (ctx, &priv->limit); } -static int nft_limit_pkts_clone (struct nft_expr *dst,const struct nft_expr *src) +static int nft_limit_pkts_clone (struct nft_expr *dst,const struct nft_expr *src, +gfp_t gfp) {struct nft_limit_priv_pkts *priv_dst =nft_expr_priv (dst);struct nft_limit_priv_pkts *priv_src =nft_expr_priv (src); priv_dst->cost = priv_src->cost; -return nft_limit_clone (&priv_dst->limit, &priv_src->limit); +return nft_limit_clone (&priv_dst->limit, &priv_src->limit, gfp); }static struct nft_expr_type nft_limit_type;
@@ -281,12 +282,13 @@ static void nft_limit_bytes_destroy(consnft_limit_destroy (ctx, priv); } -static int nft_limit_bytes_clone (struct nft_expr *dst,const struct nft_expr *src) +static int nft_limit_bytes_clone (struct nft_expr *dst,const struct nft_expr *src, +gfp_t gfp) {struct nft_limit_priv *priv_dst =nft_expr_priv (dst);struct nft_limit_priv *priv_src =nft_expr_priv (src); -return nft_limit_clone (priv_dst, priv_src); +return nft_limit_clone (priv_dst, priv_src, gfp); }static const struct nft_expr_ops nft_limit_bytes_ops = {
net/netfilter/nft_quota.c +2 -2
@@ -233,7 +233,7 @@ static void nft_quota_destroy(const strureturn nft_quota_do_destroy (ctx, priv); } -static int nft_quota_clone (struct nft_expr *dst,const struct nft_expr *src) +static int nft_quota_clone (struct nft_expr *dst,const struct nft_expr *src,gfp_t gfp) {struct nft_quota *priv_dst =nft_expr_priv (dst);struct nft_quota *priv_src =nft_expr_priv (src);
@@ -241,7 +241,7 @@ static int nft_quota_clone(struct nft_ex priv_dst->quota = priv_src->quota; priv_dst->flags = priv_src->flags; - priv_dst->consumed =kmalloc (sizeof (*priv_dst->consumed),GFP_ATOMIC ); + priv_dst->consumed =kmalloc (sizeof (*priv_dst->consumed), gfp);if (!priv_dst->consumed)return -ENOMEM ;
Quoted 10 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.6.84 release. There are 166 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Fri, 21 Mar 2025 14:29:55 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.6.84-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.6.y
and the diffstat can be found below.thanks,
greg k-h
Regressions on mips the rt305x_defconfig builds failed with gcc-12 the stable-rc v6.6.83-167-gd16a828e7b09
First seen on the v6.6.83-167-gd16a828e7b09
Good: v6.6.83
Bad: v6.6.83-167-gd16a828e7b09
* mips, build
- gcc-12-rt305x_defconfig
Regression Analysis:
- New regression? Yes
- Reproducibility? Yes
Build regression: mips implicit declaration of function 'vunmap'
## Build logio_uring/io_uring.c: In function 'io_pages_unmap':io_uring/io_uring.c:2708:17: error: implicit declaration of function 'vunmap'; did you mean 'kunmap'? [-Werror=implicit-function-declaration]
2708 | vunmap(ptr);
| ^~~~~~
| kunmap
io_uring/io_uring.c: In function '__io_uaddr_map':
io_uring/io_uring.c:2784:21: error: implicit declaration of function
'vmap'; did you mean 'kmap'? [-Werror=implicit-function-declaration]
2784 | page_addr = vmap(page_array, nr_pages, VM_MAP, PAGE_KERNEL);
| ^~~~
| kmap
io_uring/io_uring.c:2784:48: error: 'VM_MAP' undeclared (first use in
this function); did you mean 'VM_MTE'?
2784 | page_addr = vmap(page_array, nr_pages, VM_MAP, PAGE_KERNEL);
| ^~~~~~
| VM_MTE## Source
* Kernel version: 6.6.84-rc1
* Git tree: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
* Git sha: d16a828e7b0965ca37245ebea19052ad7b4b2f9b
* Git describe: v6.6.83-167-gd16a828e7b09
* Project details:
https://qa-reports.linaro.org/lkft/linux-stable-rc-linux-6.6.y/build/v6.6.83-167-gd16a828e7b09/
## Build
* Build log: https://qa-reports.linaro.org/lkft/linux-stable-rc-linux-6.6.y/build/v6.6.83-167-gd16a828e7b09/testrun/27677634/suite/build/test/gcc-12-rt305x_defconfig/log
* Build history:
https://qa-reports.linaro.org/lkft/linux-stable-rc-linux-6.6.y/build/v6.6.83-167-gd16a828e7b09/testrun/27677634/suite/build/test/gcc-12-rt305x_defconfig/history/
* Build details:
https://qa-reports.linaro.org/lkft/linux-stable-rc-linux-6.6.y/build/v6.6.83-167-gd16a828e7b09/testrun/27677634/suite/build/test/gcc-12-rt305x_defconfig/
* Build link: https://storage.tuxsuite.com/public/linaro/lkft/builds/2uXZlKzVxja3mOQfRLlPRxHzd5L/
* Kernel config:
https://storage.tuxsuite.com/public/linaro/lkft/builds/2uXZlKzVxja3mOQfRLlPRxHzd5L/config
## Steps to reproduce
- tuxmake --runtime podman --target-arch mips --toolchain gcc-12
--kconfig rt305x_defconfig
--
Linaro LKFT
https://lkft.linaro.org
Jens Axboe
maintainerQuoted 31 lines · Naresh Kamboju
Quoted 10 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.6.84 release. There are 166 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Fri, 21 Mar 2025 14:29:55 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.6.84-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.6.y
and the diffstat can be found below.thanks,
greg k-h
Regressions on mips the
rt305x_defconfigbuilds failed with gcc-12 the stable-rc v6.6.83-167-gd16a828e7b09First seen on the v6.6.83-167-gd16a828e7b09
Good: v6.6.83
Bad: v6.6.83-167-gd16a828e7b09* mips, build
- gcc-12-rt305x_defconfig
Quoted 6 lines
Regression Analysis:
- New regression? Yes
- Reproducibility? YesBuild regression: mips implicit declaration of function 'vunmap'
Ah that's my fault, forgot to include the backport of:
commit 62346c6cb28b043f2a6e95337d9081ec0b37b5f5
Author: Jens Axboe <[email protected]> Date: Sat Mar 16 07:21:43 2024 -0600
mm: add nommu variant of vm_insert_pages()
for 6.1-stable and 6.6-stable. Greg, can you just cherry pick that one? It'll pick cleanly into both, should go before the io_uring mmap series obviously.
Sorry about that! I did have it in my local trees, but for some reason forgot to include it in the sent in series.
Signature · 1 line
Jens Axboe
Greg Kroah-Hartman
maintainerQuoted 45 lines · Jens Axboe
Quoted 31 lines · Naresh Kamboju
Quoted 10 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.6.84 release. There are 166 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Fri, 21 Mar 2025 14:29:55 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.6.84-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.6.y
and the diffstat can be found below.thanks,
greg k-h
Regressions on mips the
rt305x_defconfigbuilds failed with gcc-12 the stable-rc v6.6.83-167-gd16a828e7b09First seen on the v6.6.83-167-gd16a828e7b09
Good: v6.6.83
Bad: v6.6.83-167-gd16a828e7b09* mips, build
- gcc-12-rt305x_defconfigQuoted 6 lines
Regression Analysis:
- New regression? Yes
- Reproducibility? YesBuild regression: mips implicit declaration of function 'vunmap'
Ah that's my fault, forgot to include the backport of:
commit
62346c6cb28b043f2a6e95337d9081ec0b37b5f5Author: Jens Axboe <[email protected]> Date: Sat Mar 16 07:21:43 2024 -0600
Quoted 8 lines
mm: add nommu variant of
vm_insert_pages()for 6.1-stable and 6.6-stable. Greg, can you just cherry pick that one? It'll pick cleanly into both, should go before the
io_uringmmap series obviously.Sorry about that! I did have it in my local trees, but for some reason forgot to include it in the sent in series.
No worries, will do in a few hours and will push out a -rc2.
greg k-h
Greg Kroah-Hartman
maintainerQuoted 45 lines · Jens Axboe
Quoted 31 lines · Naresh Kamboju
Quoted 10 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.6.84 release. There are 166 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Fri, 21 Mar 2025 14:29:55 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.6.84-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.6.y
and the diffstat can be found below.thanks,
greg k-h
Regressions on mips the
rt305x_defconfigbuilds failed with gcc-12 the stable-rc v6.6.83-167-gd16a828e7b09First seen on the v6.6.83-167-gd16a828e7b09
Good: v6.6.83
Bad: v6.6.83-167-gd16a828e7b09* mips, build
- gcc-12-rt305x_defconfigQuoted 6 lines
Regression Analysis:
- New regression? Yes
- Reproducibility? YesBuild regression: mips implicit declaration of function 'vunmap'
Ah that's my fault, forgot to include the backport of:
commit
62346c6cb28b043f2a6e95337d9081ec0b37b5f5Author: Jens Axboe <[email protected]> Date: Sat Mar 16 07:21:43 2024 -0600
Quoted 8 lines
mm: add nommu variant of
vm_insert_pages()for 6.1-stable and 6.6-stable. Greg, can you just cherry pick that one? It'll pick cleanly into both, should go before the
io_uringmmap series obviously.Sorry about that! I did have it in my local trees, but for some reason forgot to include it in the sent in series.
Wait, this is already in the 6.6.y and 6.1.y queues, so this can't be the fix. Was there a fixup for that commit somewhere else that I'm missing?
thanks,
greg k-h
Jens Axboe
maintainerQuoted 52 lines · Greg Kroah-Hartman
Quoted 51 lines · Jens Axboe
Quoted 31 lines · Naresh Kamboju
Quoted 10 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.6.84 release. There are 166 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Fri, 21 Mar 2025 14:29:55 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.6.84-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.6.y
and the diffstat can be found below.thanks,
greg k-h
Regressions on mips the
rt305x_defconfigbuilds failed with gcc-12 the stable-rc v6.6.83-167-gd16a828e7b09First seen on the v6.6.83-167-gd16a828e7b09
Good: v6.6.83
Bad: v6.6.83-167-gd16a828e7b09* mips, build
- gcc-12-rt305x_defconfigQuoted 6 lines
Regression Analysis:
- New regression? Yes
- Reproducibility? YesBuild regression: mips implicit declaration of function 'vunmap'
Ah that's my fault, forgot to include the backport of:
commit
62346c6cb28b043f2a6e95337d9081ec0b37b5f5Author: Jens Axboe <[email protected]> Date: Sat Mar 16 07:21:43 2024 -0600mm: add nommu variant of
vm_insert_pages()for 6.1-stable and 6.6-stable. Greg, can you just cherry pick that one? It'll pick cleanly into both, should go before the
io_uringmmap series obviously.
Quoted 6 lines
Quoted 2 lines
Sorry about that! I did have it in my local trees, but for some reason forgot to include it in the sent in series.
Wait, this is already in the 6.6.y and 6.1.y queues, so this can't be the fix. Was there a fixup for that commit somewhere else that I'm missing?
Huh indeed, guess I didn't mess up in the first place. What is going on here indeed... Is that mips config NOMMU yet doesn't link in mm/nommu.o?
Checking, and no, it definitely has MMU=y in the config. Guess I should've read the initial report more closely, it's simply missing the vunmap definition. Adding linux/vmalloc.h to io_uring/io_uring.c should fix it.
How do we want to deal with this?
io_uring/io_uring.c +1 -0
@@ -70,6 +70,7 @@#include <linux/io_uring.h> #include <linux/audit.h> #include <linux/security.h> +#include <linux/vmalloc.h> #include <asm/shmparam.h> #define CREATE_TRACE_POINTS
Signature · 1 line
Jens Axboe
Jens Axboe
maintainerQuoted 63 lines · Jens Axboe
Quoted 52 lines · Greg Kroah-Hartman
Quoted 51 lines · Jens Axboe
Quoted 31 lines · Naresh Kamboju
Quoted 10 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.6.84 release. There are 166 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Fri, 21 Mar 2025 14:29:55 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.6.84-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.6.y
and the diffstat can be found below.thanks,
greg k-h
Regressions on mips the
rt305x_defconfigbuilds failed with gcc-12 the stable-rc v6.6.83-167-gd16a828e7b09First seen on the v6.6.83-167-gd16a828e7b09
Good: v6.6.83
Bad: v6.6.83-167-gd16a828e7b09* mips, build
- gcc-12-rt305x_defconfigQuoted 6 lines
Regression Analysis:
- New regression? Yes
- Reproducibility? YesBuild regression: mips implicit declaration of function 'vunmap'
Ah that's my fault, forgot to include the backport of:
commit
62346c6cb28b043f2a6e95337d9081ec0b37b5f5Author: Jens Axboe <[email protected]> Date: Sat Mar 16 07:21:43 2024 -0600mm: add nommu variant of
vm_insert_pages()for 6.1-stable and 6.6-stable. Greg, can you just cherry pick that one? It'll pick cleanly into both, should go before the
io_uringmmap series obviously.Quoted 6 lines
Quoted 2 lines
Sorry about that! I did have it in my local trees, but for some reason forgot to include it in the sent in series.
Wait, this is already in the 6.6.y and 6.1.y queues, so this can't be the fix. Was there a fixup for that commit somewhere else that I'm missing?
Huh indeed, guess I didn't mess up in the first place. What is going on here indeed... Is that mips config NOMMU yet doesn't link in
mm/nommu.o?
Quoted 6 lines
Checking, and no, it definitely has MMU=y in the config. Guess I should've read the initial report more closely, it's simply missing the vunmap definition. Adding
linux/vmalloc.htoio_uring/io_uring.cshould fix it.How do we want to deal with this?
Either fold in the hunk from the previous email, or replace patch 2 in the series I sent with this one instead, which adds the vmalloc.h include. That should sort out the issue without needing add-on patches that don't exist upstream.
Signature · 1 line
Jens Axboe
From 063cda8806cf277c56e4bfc7163e5faa355e177d Mon Sep 17 00:00:00 2001
From: Jens Axboe <[email protected]>
Date: Wed, 13 Mar 2024 09:56:14 -0600
Subject: [PATCH 02/10] io_uring: get rid of remap_pfn_range() for mapping
rings/sqes
Commit 3ab1db3c6039e02a9deb9d5091d28d559917a645 upstream.
Rather than use remap_pfn_range() for this and manually free later, switch to using vm_insert_pages() and have it Just Work.
If possible, allocate a single compound page that covers the range that is needed. If that works, then we can just use page_address() on that page. If we fail to get a compound page, allocate single pages and use vmap() to map them into the kernel virtual address space.
This just covers the rings/sqes, the other remaining user of the mmap remap_pfn_range() user will be converted separately. Once that is done, we can kill the old alloc/free code.
--- io_uring/io_uring.c | 140 +++++++++++++++++++++++++++++++++++++++++--- io_uring/io_uring.h | 2 + 2 files changed, 134 insertions(+), 8 deletions(-)
io_uring/io_uring.c +132 -8
@@ -71,6 +71,7 @@#include <linux/io_uring.h> #include <linux/audit.h> #include <linux/security.h> +#include <linux/vmalloc.h> #include <asm/shmparam.h> #define CREATE_TRACE_POINTS
@@ -2683,6 +2684,36 @@ static int io_cqring_wait(struct io_ring_ctx *ctx, int min_events,return READ_ONCE (rings->cq.head) ==READ_ONCE (rings->cq.tail) ? ret :0 ; } +static void io_pages_unmap (void *ptr,struct page ***pages, +unsigned short *npages) +{ +bool do_vunmap = false; + +if (!ptr) +return ; + +if (*npages) { +struct page **to_free = *pages; +int i; + +/* +* Only did vmap for the non-compound multiple page case. +* For the compound page, we just need to put the head. +*/ +if (PageCompound (to_free[0 ])) + *npages =1 ; +else if (*npages >1 ) + do_vunmap = true; +for (i =0 ; i < *npages; i++) +put_page (to_free[i]); + } +if (do_vunmap) +vunmap (ptr); +kvfree (*pages); + *pages =NULL ; + *npages =0 ; +} +void io_mem_free (void *ptr) {if (!ptr)
@@ -2787,8 +2818,8 @@ static void *io_sqes_map(struct io_ring_ctx *ctx, unsigned long uaddr,static void io_rings_free (struct io_ring_ctx *ctx) {if (!(ctx->flags &IORING_SETUP_NO_MMAP )) { -io_mem_free (ctx->rings); -io_mem_free (ctx->sq_sqes); +io_pages_unmap (ctx->rings, &ctx->ring_pages, &ctx->n_ring_pages); +io_pages_unmap (ctx->sq_sqes, &ctx->sqe_pages, &ctx->n_sqe_pages); }else {io_pages_free (&ctx->ring_pages, ctx->n_ring_pages); ctx->n_ring_pages =0 ;
@@ -2800,6 +2831,80 @@ static void io_rings_free(struct io_ring_ctx *ctx) ctx->sq_sqes =NULL ; } +static void *io_mem_alloc_compound (struct page **pages,int nr_pages, +size_t size,gfp_t gfp) +{ +struct page *page; +int i, order; + + order =get_order (size); +if (order >10 ) +return ERR_PTR (-ENOMEM ); +else if (order) + gfp |= __GFP_COMP; + + page =alloc_pages (gfp, order); +if (!page) +return ERR_PTR (-ENOMEM ); + +for (i =0 ; i < nr_pages; i++) + pages[i] = page + i; + +return page_address (page); +} + +static void *io_mem_alloc_single (struct page **pages,int nr_pages,size_t size, +gfp_t gfp) +{ +void *ret; +int i; + +for (i =0 ; i < nr_pages; i++) { + pages[i] =alloc_page (gfp); +if (!pages[i]) + goto err; + } + + ret =vmap (pages, nr_pages,VM_MAP ,PAGE_KERNEL ); +if (ret) +return ret; +err: +while (i--) +put_page (pages[i]); +return ERR_PTR (-ENOMEM ); +} + +static void *io_pages_map (struct page ***out_pages,unsigned short *npages, +size_t size) +{ +gfp_t gfp =GFP_KERNEL_ACCOUNT | __GFP_ZERO | __GFP_NOWARN; +struct page **pages; +int nr_pages; +void *ret; + + nr_pages = (size +PAGE_SIZE -1 ) >>PAGE_SHIFT ; + pages =kvmalloc_array (nr_pages,sizeof (struct page *), gfp); +if (!pages) +return ERR_PTR (-ENOMEM ); + + ret =io_mem_alloc_compound (pages, nr_pages, size, gfp); +if (!IS_ERR (ret)) + goto done; + + ret =io_mem_alloc_single (pages, nr_pages, size, gfp); +if (!IS_ERR (ret)) { +done: + *out_pages = pages; + *npages = nr_pages; +return ret; + } + +kvfree (pages); + *out_pages =NULL ; + *npages =0 ; +return ret; +} +void *io_mem_alloc (size_t size) {gfp_t gfp =GFP_KERNEL_ACCOUNT | __GFP_ZERO | __GFP_NOWARN | __GFP_COMP;
@@ -3463,14 +3568,12 @@ static void *io_uring_validate_mmap_request(struct file *file,/* Don't allow mmap if the ring was setup without it */ if (ctx->flags &IORING_SETUP_NO_MMAP )return ERR_PTR (-EINVAL ); - ptr = ctx->rings; -break ; +return ctx->rings;case IORING_OFF_SQES :/* Don't allow mmap if the ring was setup without it */ if (ctx->flags &IORING_SETUP_NO_MMAP )return ERR_PTR (-EINVAL ); - ptr = ctx->sq_sqes; -break ; +return ctx->sq_sqes;case IORING_OFF_PBUF_RING : {struct io_buffer_list *bl;unsigned int bgid;
@@ -3494,11 +3597,22 @@ static void *io_uring_validate_mmap_request(struct file *file,return ptr; } +int io_uring_mmap_pages (struct io_ring_ctx *ctx,struct vm_area_struct *vma, +struct page **pages,int npages) +{ +unsigned long nr_pages = npages; + +vm_flags_set (vma,VM_DONTEXPAND ); +return vm_insert_pages (vma, vma->vm_start, pages, &nr_pages); +} +#ifdef CONFIG_MMU static __cold int io_uring_mmap (struct file *file,struct vm_area_struct *vma) { +struct io_ring_ctx *ctx = file->private_data;size_t sz = vma->vm_end - vma->vm_start; +long offset = vma->vm_pgoff <<PAGE_SHIFT ;unsigned long pfn;void *ptr;
@@ -3506,6 +3620,16 @@ static __cold int io_uring_mmap(struct file *file, struct vm_area_struct *vma)if (IS_ERR (ptr))return PTR_ERR (ptr); +switch (offset &IORING_OFF_MMAP_MASK ) { +case IORING_OFF_SQ_RING : +case IORING_OFF_CQ_RING : +return io_uring_mmap_pages (ctx, vma, ctx->ring_pages, + ctx->n_ring_pages); +case IORING_OFF_SQES : +return io_uring_mmap_pages (ctx, vma, ctx->sqe_pages, + ctx->n_sqe_pages); + } + pfn =virt_to_phys (ptr) >>PAGE_SHIFT ;return remap_pfn_range (vma, vma->vm_start, pfn, sz, vma->vm_page_prot); }
@@ -3795,7 +3919,7 @@ static __cold int io_allocate_scq_urings(struct io_ring_ctx *ctx,return -EOVERFLOW ;if (!(ctx->flags &IORING_SETUP_NO_MMAP )) - rings =io_mem_alloc (size); + rings =io_pages_map (&ctx->ring_pages, &ctx->n_ring_pages, size);else rings =io_rings_map (ctx, p->cq_off.user_addr, size);
@@ -3820,7 +3944,7 @@ static __cold int io_allocate_scq_urings(struct io_ring_ctx *ctx, }if (!(ctx->flags &IORING_SETUP_NO_MMAP )) - ptr =io_mem_alloc (size); + ptr =io_pages_map (&ctx->sqe_pages, &ctx->n_sqe_pages, size);else ptr =io_sqes_map (ctx, p->sq_off.user_addr, size);
io_uring/io_uring.h +2 -0
@@ -55,6 +55,8 @@ bool io_fill_cqe_req_aux(struct io_kiocb *req, bool defer, s32 res, u32 cflags);void __io_commit_cqring_flush (struct io_ring_ctx *ctx);struct page **io_pin_pages (unsigned long ubuf,unsigned long len,int *npages); +int io_uring_mmap_pages (struct io_ring_ctx *ctx,struct vm_area_struct *vma, +struct page **pages,int npages);struct file *io_file_get_normal (struct io_kiocb *req,int fd); struct file *io_file_get_fixed(struct io_kiocb *req, int fd,
Signature · 1 line
2.49.0
Greg Kroah-Hartman
maintainerQuoted 69 lines · Jens Axboe
Quoted 68 lines · Jens Axboe
Quoted 52 lines · Greg Kroah-Hartman
Quoted 51 lines · Jens Axboe
Quoted 31 lines · Naresh Kamboju
Quoted 10 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.6.84 release. There are 166 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Fri, 21 Mar 2025 14:29:55 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.6.84-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.6.y
and the diffstat can be found below.thanks,
greg k-h
Regressions on mips the
rt305x_defconfigbuilds failed with gcc-12 the stable-rc v6.6.83-167-gd16a828e7b09First seen on the v6.6.83-167-gd16a828e7b09
Good: v6.6.83
Bad: v6.6.83-167-gd16a828e7b09* mips, build
- gcc-12-rt305x_defconfigQuoted 6 lines
Regression Analysis:
- New regression? Yes
- Reproducibility? YesBuild regression: mips implicit declaration of function 'vunmap'
Ah that's my fault, forgot to include the backport of:
commit
62346c6cb28b043f2a6e95337d9081ec0b37b5f5Author: Jens Axboe <[email protected]> Date: Sat Mar 16 07:21:43 2024 -0600mm: add nommu variant of
vm_insert_pages()for 6.1-stable and 6.6-stable. Greg, can you just cherry pick that one? It'll pick cleanly into both, should go before the
io_uringmmap series obviously.Quoted 6 lines
Quoted 2 lines
Sorry about that! I did have it in my local trees, but for some reason forgot to include it in the sent in series.
Wait, this is already in the 6.6.y and 6.1.y queues, so this can't be the fix. Was there a fixup for that commit somewhere else that I'm missing?
Huh indeed, guess I didn't mess up in the first place. What is going on here indeed... Is that mips config NOMMU yet doesn't link in
mm/nommu.o?Checking, and no, it definitely has MMU=y in the config. Guess I should've read the initial report more closely, it's simply missing the vunmap definition. Adding
linux/vmalloc.htoio_uring/io_uring.cshould fix it.
Quoted 6 lines
Quoted 1 line
How do we want to deal with this?
Either fold in the hunk from the previous email, or replace patch 2 in the series I sent with this one instead, which adds the
vmalloc.hinclude. That should sort out the issue without needing add-on patches that don't exist upstream.
Now replaced, thanks!
Hello,
Quoted 7 lines · On Wed, 19 Mar 2025 07:29:31 -0700 Greg Kroah-Hartman…
This is the start of the stable review cycle for the 6.6.84 release. There are 166 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Fri, 21 Mar 2025 14:29:55 +0000. Anything received after that time might be too late.
This rc kernel passes DAMON functionality test[1] on my test machine. Attaching the test results summary below. Please note that I retrieved the kernel from linux-stable-rc tree[2].
[1] https://github.com/damonitor/damon-tests/tree/next/corr
[2] d16a828e7b09 ("Linux 6.6.84-rc1")
Thanks,
SJ
[...]
---
ok 1 selftests: damon: debugfs_attrs.sh
ok 2 selftests: damon: debugfs_schemes.sh
ok 3 selftests: damon: debugfs_target_ids.sh
ok 4 selftests: damon: debugfs_empty_targets.sh
ok 5 selftests: damon: debugfs_huge_count_read_write.sh
ok 6 selftests: damon: debugfs_duplicate_context_creation.sh
ok 7 selftests: damon: debugfs_rm_non_contexts.sh
ok 8 selftests: damon: sysfs.sh
ok 9 selftests: damon: sysfs_update_removed_scheme_dir.sh
ok 10 selftests: damon: reclaim.sh
ok 11 selftests: damon: lru_sort.sh
ok 1 selftests: damon-tests: kunit.sh
ok 2 selftests: damon-tests: huge_count_read_write.sh
ok 3 selftests: damon-tests: buffer_overflow.sh
ok 4 selftests: damon-tests: rm_contexts.sh
ok 5 selftests: damon-tests: record_null_deref.sh
ok 6 selftests: damon-tests: dbgfs_target_ids_read_before_terminate_race.sh ok 7 selftests: damon-tests: dbgfs_target_ids_pid_leak.sh
ok 8 selftests: damon-tests: damo_tests.sh
ok 9 selftests: damon-tests: masim-record.sh
ok 10 selftests: damon-tests: build_i386.sh
ok 11 selftests: damon-tests: build_arm64.sh # SKIP
ok 12 selftests: damon-tests: build_m68k.sh # SKIP
ok 13 selftests: damon-tests: build_i386_idle_flag.sh
ok 14 selftests: damon-tests: build_i386_highpte.sh
ok 15 selftests: damon-tests: build_nomemcg.sh
[33m
[92mPASS [39m
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.6.84 release. There are 166 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Fri, 21 Mar 2025 14:29:55 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.6.84-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.6.y
and the diffstat can be found below.thanks,
greg k-h
All tests passing for Tegra ...
Test results for stable-v6.6:
10 builds: 10 pass, 0 fail
28 boots: 28 pass, 0 fail
116 tests: 116 pass, 0 failLinux version: 6.6.84-rc1-gd16a828e7b09
Boards tested: tegra124-jetson-tk1, tegra186-p2771-0000,
tegra186-p3509-0000+p3636-0001, tegra194-p2972-0000,
tegra194-p3509-0000+p3668-0000, tegra20-ventana,
tegra210-p2371-2180, tegra210-p3450-0000,
tegra30-cardhu-a04Jon
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.6.84 release. There are 166 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Fri, 21 Mar 2025 14:29:55 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.6.84-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.6.y
and the diffstat can be found below.thanks,
greg k-h
Built and booted successfully on RISC-V RV64 (HiFive Unmatched).
Quoted 8 lines · On Wed, 19 Mar 2025 07:29:31 -0700 Greg Kroah-Hartman…
This is the start of the stable review cycle for the 6.6.84 release. There are 166 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Fri, 21 Mar 2025 14:29:55 +0000. Anything received after that time might be too late.
Boot-tested under QEMU for Rust x86_64:
Thanks!
Cheers,
Miguel
Quoted 4 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.6.84 release. There are 166 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
The kernel, bpf tool, perf tool, and kselftest builds fine for v6.6.84-rc1 on x86 and arm64 Azure VM.
Kernel binary size for x86 build:
text data bss dec hex filename 27318662 16715490 4640768 48674920 2e6b868 vmlinux
Kernel binary size for arm64 build:
text data bss dec hex filename 34684949 13845466 970368 49500783 2f3526f vmlinux
Thanks,
Hardik
Am 19.03.2025 um 15:29 schrieb Greg Kroah-Hartman:
Quoted 4 lines
This is the start of the stable review cycle for the 6.6.84 release. There are 166 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Builds, boots and works on my 2-socket Ivy Bridge Xeon E5-2697 v2 server. No dmesg oddities or regressions found.
Beste Grüße,
Peter Schneider
Signature · 8 lines
Climb the mountain not to plant your flag, but to embrace the challenge, enjoy the air and behold the view. Climb it so you can see the world, not so the world can see you. -- David McCullough Jr. OpenPGP: 0xA3828BD796CCE11A8CADE8866E3A92C92C3FF244 Download: https://www.peters-netzplatz.de/download/pschneider1968_pub.asc https://keys.mailvelope.com/pks/lookup?op=get&[email protected] https://keys.mailvelope.com/pks/lookup?op=get&[email protected]