Activity log for bug #1991790

Date Who What changed Old value New value Message
2022-10-05 12:44:12 Alexandre Ghiti bug added bug
2022-10-10 11:07:22 Emil Renner Berthing description [ Impact ] sv57 breaks Go since Go uses the upper bits of a pointer to store data, and it is not ready for sv57 yet. It probably breaks other type of software using this "pointer tagging" technic. The following patch fixes this: at the moment, there is no way to indicate to the kernel to downgrade to sv48, so we must patch the kernel. diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c index 2c4a64e97aec..18a0c70ed313 100644 --- a/arch/riscv/mm/init.c +++ b/arch/riscv/mm/init.c @@ -775,6 +775,10 @@ static __init void set_satp_mode(void) disable_pgtable_l4(); } + /* UBUNTU: Force disable sv57 and fallback to sv48 */ + if (pgtable_l5_enabled) + disable_pgtable_l5(); + memset(early_pg_dir, 0, PAGE_SIZE); memset(early_p4d, 0, PAGE_SIZE); memset(early_pud, 0, PAGE_SIZE); [ Test Plan ] Build an image with the new kernel and make sure snapd started correctly, or that you can compile a simple helloworld written in Go. [ Where problems could occur ] The patch could be wrong, but I already built a kernel with it and it worked fine. [ Impact ] * Linux 5.18 merged support for 5-level page tables (sv57), and it does it such that 5-level page tables are used whenever the system supports it. * So far only Qemu support sv57, but it breaks Go since Go uses too many of the upper bits of pointers to store data, and is not yet ready for sv57. It probably breaks other types of software using too many bits for this "pointer tagging" technique. At the moment, there is no way to indicate to the kernel to downgrade to sv48, so we must patch the kernel: diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c index 2c4a64e97aec..18a0c70ed313 100644 --- a/arch/riscv/mm/init.c +++ b/arch/riscv/mm/init.c @@ -775,6 +775,10 @@ static __init void set_satp_mode(void)                 disable_pgtable_l4();         } + /* UBUNTU: Force disable sv57 and fallback to sv48 */ + if (pgtable_l5_enabled) + disable_pgtable_l5(); +         memset(early_pg_dir, 0, PAGE_SIZE);         memset(early_p4d, 0, PAGE_SIZE);         memset(early_pud, 0, PAGE_SIZE); [ Test Plan ] * Build an image with the patched kernel and make sure snapd and other Go programs works correctly and that you can compile a simple helloworld written in Go. [ Where problems could occur ] * The patch could be buggy. * Qemu will no longer work with > 128 PB of memory.
2022-10-10 11:08:52 Emil Renner Berthing description [ Impact ] * Linux 5.18 merged support for 5-level page tables (sv57), and it does it such that 5-level page tables are used whenever the system supports it. * So far only Qemu support sv57, but it breaks Go since Go uses too many of the upper bits of pointers to store data, and is not yet ready for sv57. It probably breaks other types of software using too many bits for this "pointer tagging" technique. At the moment, there is no way to indicate to the kernel to downgrade to sv48, so we must patch the kernel: diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c index 2c4a64e97aec..18a0c70ed313 100644 --- a/arch/riscv/mm/init.c +++ b/arch/riscv/mm/init.c @@ -775,6 +775,10 @@ static __init void set_satp_mode(void)                 disable_pgtable_l4();         } + /* UBUNTU: Force disable sv57 and fallback to sv48 */ + if (pgtable_l5_enabled) + disable_pgtable_l5(); +         memset(early_pg_dir, 0, PAGE_SIZE);         memset(early_p4d, 0, PAGE_SIZE);         memset(early_pud, 0, PAGE_SIZE); [ Test Plan ] * Build an image with the patched kernel and make sure snapd and other Go programs works correctly and that you can compile a simple helloworld written in Go. [ Where problems could occur ] * The patch could be buggy. * Qemu will no longer work with > 128 PB of memory. [ Impact ] * Linux 5.18 merged support for 5-level page tables (sv57), and it   does it such that 5-level page tables are used whenever the   system supports it. * So far only Qemu support sv57, but it breaks Go since Go uses   too many of the upper bits of pointers to store data, and is not   yet ready for sv57. It probably breaks other types of software   using too many bits for this "pointer tagging" technique.   At the moment, there is no way to indicate to the kernel to   downgrade to sv48, so we must patch the kernel: diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c index 2c4a64e97aec..18a0c70ed313 100644 --- a/arch/riscv/mm/init.c +++ b/arch/riscv/mm/init.c @@ -775,6 +775,10 @@ static __init void set_satp_mode(void)                 disable_pgtable_l4();         } + /* UBUNTU: Force disable sv57 and fallback to sv48 */ + if (pgtable_l5_enabled) + disable_pgtable_l5(); +         memset(early_pg_dir, 0, PAGE_SIZE);         memset(early_p4d, 0, PAGE_SIZE);         memset(early_pud, 0, PAGE_SIZE); [ Test Plan ] * Build an image with the patched kernel and make sure snapd and   other Go programs works correctly and that you can compile a   simple helloworld written in Go. [ Where problems could occur ] * The patch could be buggy. * Qemu will no longer work with > 256 TB of memory.
2022-10-10 11:14:52 Emil Renner Berthing description [ Impact ] * Linux 5.18 merged support for 5-level page tables (sv57), and it   does it such that 5-level page tables are used whenever the   system supports it. * So far only Qemu support sv57, but it breaks Go since Go uses   too many of the upper bits of pointers to store data, and is not   yet ready for sv57. It probably breaks other types of software   using too many bits for this "pointer tagging" technique.   At the moment, there is no way to indicate to the kernel to   downgrade to sv48, so we must patch the kernel: diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c index 2c4a64e97aec..18a0c70ed313 100644 --- a/arch/riscv/mm/init.c +++ b/arch/riscv/mm/init.c @@ -775,6 +775,10 @@ static __init void set_satp_mode(void)                 disable_pgtable_l4();         } + /* UBUNTU: Force disable sv57 and fallback to sv48 */ + if (pgtable_l5_enabled) + disable_pgtable_l5(); +         memset(early_pg_dir, 0, PAGE_SIZE);         memset(early_p4d, 0, PAGE_SIZE);         memset(early_pud, 0, PAGE_SIZE); [ Test Plan ] * Build an image with the patched kernel and make sure snapd and   other Go programs works correctly and that you can compile a   simple helloworld written in Go. [ Where problems could occur ] * The patch could be buggy. * Qemu will no longer work with > 256 TB of memory. [ Impact ] * Linux 5.18 merged support for 5-level page tables (sv57), and it   does it such that 5-level page tables are used whenever the   system supports it. * So far only Qemu support sv57, but it breaks Go since Go uses   too many of the upper bits of pointers to store data, and is not   yet ready for sv57. It probably breaks other types of software   using too many bits for this "pointer tagging" technique too.   At the moment, there is no way to indicate to the kernel to   downgrade to sv48, so we must patch the kernel: diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c index 2c4a64e97aec..18a0c70ed313 100644 --- a/arch/riscv/mm/init.c +++ b/arch/riscv/mm/init.c @@ -775,6 +775,10 @@ static __init void set_satp_mode(void)                 disable_pgtable_l4();         } + /* UBUNTU: Force disable sv57 and fallback to sv48 */ + if (pgtable_l5_enabled) + disable_pgtable_l5(); +         memset(early_pg_dir, 0, PAGE_SIZE);         memset(early_p4d, 0, PAGE_SIZE);         memset(early_pud, 0, PAGE_SIZE); [ Test Plan ] * Build an image with the patched kernel and make sure snapd and   other Go programs work correctly and that you can compile a   simple helloworld written in Go. [ Where problems could occur ] * The patch could be buggy. * Qemu will no longer work with > 256 TB of memory.
2022-10-10 17:45:28 Emil Renner Berthing linux-riscv (Ubuntu): assignee Emil Renner Berthing (esmil)
2022-10-12 13:53:00 Launchpad Janitor linux-riscv (Ubuntu): status New Fix Released
2022-10-12 13:53:00 Launchpad Janitor cve linked 2022-2978
2022-12-07 15:37:07 Ubuntu Kernel Bot tags kernel-spammed-jammy-linux-hwe-5.19 verification-needed-jammy
2023-05-23 14:12:59 Richard Jones bug added subscriber Richard Jones