Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1441013 > unrolled thread
| Started by | AKASHI Takahiro <takahiro.akashi@linaro.org> |
|---|---|
| First post | 2016-07-12 03:40 +0200 |
| Last post | 2016-07-13 15:30 +0200 |
| Articles | 20 on this page of 70 — 14 participants |
Back to article view | Back to linux.kernel
[RFC 0/3] extend kexec_file_load system call AKASHI Takahiro <takahiro.akashi@linaro.org> - 2016-07-12 03:40 +0200
Re: [RFC 0/3] extend kexec_file_load system call ebiederm@xmission.com (Eric W. Biederman) - 2016-07-12 15:40 +0200
Re: [RFC 0/3] extend kexec_file_load system call Thiago Jung Bauermann <bauerman@linux.vnet.ibm.com> - 2016-07-12 16:00 +0200
Re: [RFC 0/3] extend kexec_file_load system call Vivek Goyal <vgoyal@redhat.com> - 2016-07-12 16:10 +0200
Re: [RFC 0/3] extend kexec_file_load system call Stewart Smith <stewart@linux.vnet.ibm.com> - 2016-07-13 01:50 +0200
Re: [RFC 0/3] extend kexec_file_load system call Vivek Goyal <vgoyal@redhat.com> - 2016-07-13 15:30 +0200
Re: [RFC 0/3] extend kexec_file_load system call Arnd Bergmann <arnd@arndb.de> - 2016-07-12 16:10 +0200
Re: [RFC 0/3] extend kexec_file_load system call Vivek Goyal <vgoyal@redhat.com> - 2016-07-12 16:20 +0200
Re: [RFC 0/3] extend kexec_file_load system call Arnd Bergmann <arnd@arndb.de> - 2016-07-12 16:30 +0200
Re: [RFC 0/3] extend kexec_file_load system call Mark Rutland <mark.rutland@arm.com> - 2016-07-12 17:00 +0200
Re: [RFC 0/3] extend kexec_file_load system call Dave Young <dyoung@redhat.com> - 2016-07-13 04:40 +0200
Re: [RFC 0/3] extend kexec_file_load system call Arnd Bergmann <arnd@arndb.de> - 2016-07-13 10:10 +0200
Re: [RFC 0/3] extend kexec_file_load system call Stewart Smith <stewart@linux.vnet.ibm.com> - 2016-07-13 10:30 +0200
Re: [RFC 0/3] extend kexec_file_load system call Mark Rutland <mark.rutland@arm.com> - 2016-07-13 11:50 +0200
Re: [RFC 0/3] extend kexec_file_load system call Arnd Bergmann <arnd@arndb.de> - 2016-07-13 15:20 +0200
Re: [RFC 0/3] extend kexec_file_load system call Thiago Jung Bauermann <bauerman@linux.vnet.ibm.com> - 2016-07-13 20:50 +0200
Re: [RFC 0/3] extend kexec_file_load system call Arnd Bergmann <arnd@arndb.de> - 2016-07-13 22:10 +0200
Re: [RFC 0/3] extend kexec_file_load system call Thiago Jung Bauermann <bauerman@linux.vnet.ibm.com> - 2016-07-14 04:20 +0200
Re: [RFC 0/3] extend kexec_file_load system call Arnd Bergmann <arnd@arndb.de> - 2016-07-14 10:40 +0200
Re: [RFC 0/3] extend kexec_file_load system call Thiago Jung Bauermann <bauerman@linux.vnet.ibm.com> - 2016-07-15 03:50 +0200
Re: [RFC 0/3] extend kexec_file_load system call Arnd Bergmann <arnd@arndb.de> - 2016-07-15 09:40 +0200
Re: [RFC 0/3] extend kexec_file_load system call Vivek Goyal <vgoyal@redhat.com> - 2016-07-15 15:30 +0200
Re: [RFC 0/3] extend kexec_file_load system call Mark Rutland <mark.rutland@arm.com> - 2016-07-15 15:40 +0200
Re: [RFC 0/3] extend kexec_file_load system call Thiago Jung Bauermann <bauerman@linux.vnet.ibm.com> - 2016-07-15 17:30 +0200
Re: [RFC 0/3] extend kexec_file_load system call Mark Rutland <mark.rutland@arm.com> - 2016-07-15 17:50 +0200
Re: [RFC 0/3] extend kexec_file_load system call Russell King - ARM Linux <linux@armlinux.org.uk> - 2016-07-15 15:50 +0200
Re: [RFC 0/3] extend kexec_file_load system call Arnd Bergmann <arnd@arndb.de> - 2016-07-15 22:30 +0200
Re: [RFC 0/3] extend kexec_file_load system call Thiago Jung Bauermann <bauerman@linux.vnet.ibm.com> - 2016-07-15 23:10 +0200
Re: [RFC 0/3] extend kexec_file_load system call Thiago Jung Bauermann <bauerman@linux.vnet.ibm.com> - 2016-07-22 02:20 +0200
Re: [RFC 0/3] extend kexec_file_load system call Jeremy Kerr <jeremy.kerr@au1.ibm.com> - 2016-07-22 03:00 +0200
Re: [RFC 0/3] extend kexec_file_load system call Michael Ellerman <michael@ellerman.id.au> - 2016-07-22 05:00 +0200
Re: [RFC 0/3] extend kexec_file_load system call Thiago Jung Bauermann <bauerman@linux.vnet.ibm.com> - 2016-07-22 22:50 +0200
Re: [RFC 0/3] extend kexec_file_load system call Russell King - ARM Linux <linux@armlinux.org.uk> - 2016-07-15 10:50 +0200
Re: [RFC 0/3] extend kexec_file_load system call Vivek Goyal <vgoyal@redhat.com> - 2016-07-15 15:10 +0200
Re: [RFC 0/3] extend kexec_file_load system call Mark Rutland <mark.rutland@arm.com> - 2016-07-13 11:40 +0200
Re: [RFC 0/3] extend kexec_file_load system call AKASHI Takahiro <takahiro.akashi@linaro.org> - 2016-07-13 19:40 +0200
Re: [RFC 0/3] extend kexec_file_load system call Mark Rutland <mark.rutland@arm.com> - 2016-07-13 20:10 +0200
Re: [RFC 0/3] extend kexec_file_load system call Arnd Bergmann <arnd@arndb.de> - 2016-07-13 22:00 +0200
Re: [RFC 0/3] extend kexec_file_load system call Mark Rutland <mark.rutland@arm.com> - 2016-07-14 14:50 +0200
Re: [RFC 0/3] extend kexec_file_load system call Dave Young <dyoung@redhat.com> - 2016-07-14 04:00 +0200
Re: [RFC 0/3] extend kexec_file_load system call Dave Young <dyoung@redhat.com> - 2016-07-14 04:00 +0200
Re: [RFC 0/3] extend kexec_file_load system call Thiago Jung Bauermann <bauerman@linux.vnet.ibm.com> - 2016-07-12 18:30 +0200
Re: [RFC 0/3] extend kexec_file_load system call Petr Tesarik <ptesarik@suse.cz> - 2016-07-12 23:00 +0200
Re: [RFC 0/3] extend kexec_file_load system call ebiederm@xmission.com (Eric W. Biederman) - 2016-07-12 23:40 +0200
Re: [RFC 0/3] extend kexec_file_load system call ebiederm@xmission.com (Eric W. Biederman) - 2016-07-13 00:00 +0200
Re: [RFC 0/3] extend kexec_file_load system call Petr Tesarik <ptesarik@suse.cz> - 2016-07-13 00:00 +0200
Re: [RFC 0/3] extend kexec_file_load system call Russell King - ARM Linux <linux@armlinux.org.uk> - 2016-07-13 00:20 +0200
Re: [RFC 0/3] extend kexec_file_load system call Stewart Smith <stewart@linux.vnet.ibm.com> - 2016-07-13 07:10 +0200
Re: [RFC 0/3] extend kexec_file_load system call Russell King - ARM Linux <linux@armlinux.org.uk> - 2016-07-13 09:40 +0200
Re: [RFC 0/3] extend kexec_file_load system call Ard Biesheuvel <ard.biesheuvel@linaro.org> - 2016-07-13 09:50 +0200
Re: [RFC 0/3] extend kexec_file_load system call Russell King - ARM Linux <linux@armlinux.org.uk> - 2016-07-13 10:20 +0200
Re: [RFC 0/3] extend kexec_file_load system call Stewart Smith <stewart@linux.vnet.ibm.com> - 2016-07-13 10:30 +0200
Re: [RFC 0/3] extend kexec_file_load system call Stewart Smith <stewart@linux.vnet.ibm.com> - 2016-07-13 10:00 +0200
Re: [RFC 0/3] extend kexec_file_load system call Russell King - ARM Linux <linux@armlinux.org.uk> - 2016-07-13 10:30 +0200
Re: [RFC 0/3] extend kexec_file_load system call Dave Young <dyoung@redhat.com> - 2016-07-13 10:40 +0200
Re: [RFC 0/3] extend kexec_file_load system call Petr Tesarik <ptesarik@suse.cz> - 2016-07-13 11:00 +0200
Re: [RFC 0/3] extend kexec_file_load system call Vivek Goyal <vgoyal@redhat.com> - 2016-07-13 15:10 +0200
Re: [RFC 0/3] extend kexec_file_load system call Russell King - ARM Linux <linux@armlinux.org.uk> - 2016-07-13 19:50 +0200
Re: [RFC 0/3] extend kexec_file_load system call Vivek Goyal <vgoyal@redhat.com> - 2016-07-13 20:30 +0200
Re: [RFC 0/3] extend kexec_file_load system call Balbir Singh <bsingharora@gmail.com> - 2016-07-18 14:50 +0200
Re: [RFC 0/3] extend kexec_file_load system call Vivek Goyal <vgoyal@redhat.com> - 2016-07-18 15:30 +0200
Re: [RFC 0/3] extend kexec_file_load system call Vivek Goyal <vgoyal@redhat.com> - 2016-07-18 15:40 +0200
Re: [RFC 0/3] extend kexec_file_load system call Balbir Singh <bsingharora@gmail.com> - 2016-07-20 05:50 +0200
Re: [RFC 0/3] extend kexec_file_load system call Russell King - ARM Linux <linux@armlinux.org.uk> - 2016-07-20 10:40 +0200
Re: [RFC 0/3] extend kexec_file_load system call Arnd Bergmann <arnd@arndb.de> - 2016-07-20 13:20 +0200
Re: [RFC 0/3] extend kexec_file_load system call Thiago Jung Bauermann <bauerman@linux.vnet.ibm.com> - 2016-07-20 18:00 +0200
Re: [RFC 0/3] extend kexec_file_load system call Vivek Goyal <vgoyal@redhat.com> - 2016-07-20 14:50 +0200
Re: [RFC 0/3] extend kexec_file_load system call Vivek Goyal <vgoyal@redhat.com> - 2016-07-20 14:30 +0200
Re: [RFC 0/3] extend kexec_file_load system call Stewart Smith <stewart@linux.vnet.ibm.com> - 2016-07-13 01:50 +0200
Re: [RFC 0/3] extend kexec_file_load system call Vivek Goyal <vgoyal@redhat.com> - 2016-07-13 15:30 +0200
Page 2 of 4 — ← Prev page 1 [2] 3 4 Next page →
| From | Arnd Bergmann <arnd@arndb.de> |
|---|---|
| Date | 2016-07-15 09:40 +0200 |
| Message-ID | <rV5T3-43Z-3@gated-at.bofh.it> |
| In reply to | #1443863 |
On Thursday, July 14, 2016 10:44:14 PM CEST Thiago Jung Bauermann wrote: > Am Donnerstag, 14 Juli 2016, 10:29:11 schrieb Arnd Bergmann: > > > > Right, but the question remains whether this helps while you allow the > > boot loader to modify the dtb. If an attacker gets in and cannot modify > > the kernel or initid but can modify the DT, a successful attack would > > be a bit harder than having a modified kernel, but you may still need > > to treat the system as compromised. > > Yes, and the same question also remains regarding the kernel command line. > > We can have the kernel perform sanity checks on the device tree, just as the > kernel needs to sanity check the command line. > > There's the point that was raised about not wanting to increase the attack > surface, and that's a valid point. But at least in the way Petitboot works > today, it needs to modify the device tree and pass it to the kernel. > > One thing that is unavoidable to come from userspace is > /chosen/linux,stdout-path, because it's Petitboot that knows from which > console the user is interacting with. The other modification to set > properties in vga@0 can be done in the kernel. > > Given that on DTB-based systems /chosen is an important and established way > to pass information to the operating system being booted, I'd like to > suggest the following, then: > > Extend the syscall as shown in this RFC from Takahiro AKASHI, but instead of > accepting a complete DTB from userspace, the syscall would accept a DTB > containing only a /chosen node. If the DTB contains any other node, the > syscall fails with EINVAL. The kernel can then add the properties in /chosen > to the device tree that it will pass to the next kernel. > > What do you think? I think that helps, as it makes the problem space correspond to that of modifying the command line, but I can still come up with countless attacks based on modifications of the /chosen node and/or the command line, in fact it's probably easier than any other node. What methods to we have in place for command line changes today on other architectures? Arnd
[toc] | [prev] | [next] | [standalone]
| From | Vivek Goyal <vgoyal@redhat.com> |
|---|---|
| Date | 2016-07-15 15:30 +0200 |
| Message-ID | <rVblM-7q0-15@gated-at.bofh.it> |
| In reply to | #1443998 |
On Fri, Jul 15, 2016 at 09:31:02AM +0200, Arnd Bergmann wrote: > On Thursday, July 14, 2016 10:44:14 PM CEST Thiago Jung Bauermann wrote: > > Am Donnerstag, 14 Juli 2016, 10:29:11 schrieb Arnd Bergmann: > > > > > > > Right, but the question remains whether this helps while you allow the > > > boot loader to modify the dtb. If an attacker gets in and cannot modify > > > the kernel or initid but can modify the DT, a successful attack would > > > be a bit harder than having a modified kernel, but you may still need > > > to treat the system as compromised. > > > > Yes, and the same question also remains regarding the kernel command line. > > > > We can have the kernel perform sanity checks on the device tree, just as the > > kernel needs to sanity check the command line. > > > > There's the point that was raised about not wanting to increase the attack > > surface, and that's a valid point. But at least in the way Petitboot works > > today, it needs to modify the device tree and pass it to the kernel. > > > > One thing that is unavoidable to come from userspace is > > /chosen/linux,stdout-path, because it's Petitboot that knows from which > > console the user is interacting with. The other modification to set > > properties in vga@0 can be done in the kernel. > > > > Given that on DTB-based systems /chosen is an important and established way > > to pass information to the operating system being booted, I'd like to > > suggest the following, then: > > > > Extend the syscall as shown in this RFC from Takahiro AKASHI, but instead of > > accepting a complete DTB from userspace, the syscall would accept a DTB > > containing only a /chosen node. If the DTB contains any other node, the > > syscall fails with EINVAL. The kernel can then add the properties in /chosen > > to the device tree that it will pass to the next kernel. > > > > What do you think? > > I think that helps, as it makes the problem space correspond to that > of modifying the command line, but I can still come up with countless > attacks based on modifications of the /chosen node and/or the command > line, in fact it's probably easier than any other node. I don't know anything about DTB. So here comes a very basic question. Does DTB allow passing an executable blob to kernel or pass the location of some unsigned executable code at kernel level. I think from secureboot point of view that would be a concern. Being able to trick kernel to execute an unsigned code at privileged level. Vivek
[toc] | [prev] | [next] | [standalone]
| From | Mark Rutland <mark.rutland@arm.com> |
|---|---|
| Date | 2016-07-15 15:40 +0200 |
| Message-ID | <rVbvs-7t6-13@gated-at.bofh.it> |
| In reply to | #1444319 |
On Fri, Jul 15, 2016 at 09:26:10AM -0400, Vivek Goyal wrote: > On Fri, Jul 15, 2016 at 09:31:02AM +0200, Arnd Bergmann wrote: > > On Thursday, July 14, 2016 10:44:14 PM CEST Thiago Jung Bauermann wrote: > > > Am Donnerstag, 14 Juli 2016, 10:29:11 schrieb Arnd Bergmann: > > > > > > > > > > Right, but the question remains whether this helps while you allow the > > > > boot loader to modify the dtb. If an attacker gets in and cannot modify > > > > the kernel or initid but can modify the DT, a successful attack would > > > > be a bit harder than having a modified kernel, but you may still need > > > > to treat the system as compromised. > > > > > > Yes, and the same question also remains regarding the kernel command line. > > > > > > We can have the kernel perform sanity checks on the device tree, just as the > > > kernel needs to sanity check the command line. > > > > > > There's the point that was raised about not wanting to increase the attack > > > surface, and that's a valid point. But at least in the way Petitboot works > > > today, it needs to modify the device tree and pass it to the kernel. > > > > > > One thing that is unavoidable to come from userspace is > > > /chosen/linux,stdout-path, because it's Petitboot that knows from which > > > console the user is interacting with. The other modification to set > > > properties in vga@0 can be done in the kernel. > > > > > > Given that on DTB-based systems /chosen is an important and established way > > > to pass information to the operating system being booted, I'd like to > > > suggest the following, then: > > > > > > Extend the syscall as shown in this RFC from Takahiro AKASHI, but instead of > > > accepting a complete DTB from userspace, the syscall would accept a DTB > > > containing only a /chosen node. If the DTB contains any other node, the > > > syscall fails with EINVAL. The kernel can then add the properties in /chosen > > > to the device tree that it will pass to the next kernel. > > > > > > What do you think? > > > > I think that helps, as it makes the problem space correspond to that > > of modifying the command line, but I can still come up with countless > > attacks based on modifications of the /chosen node and/or the command > > line, in fact it's probably easier than any other node. > > I don't know anything about DTB. So here comes a very basic question. Does > DTB allow passing an executable blob to kernel or pass the location of > some unsigned executable code at kernel level. I think from secureboot point of > view that would be a concern. Being able to trick kernel to execute an > unsigned code at privileged level. The DTB itself won't contain executable code. However, arbitrary bindings could point kernel at such code. For instance, /chosen/linux,uefi-system-table could point the kernel at a faked EFI system table, with pointers to malicious code. So arbitrary modification of /chosen is not safe. Bindings describe arbitrary system features (devices, firmware interfaces, etc), so in general they might provide mechanisms to execute code. Thanks, Mark.
[toc] | [prev] | [next] | [standalone]
| From | Thiago Jung Bauermann <bauerman@linux.vnet.ibm.com> |
|---|---|
| Date | 2016-07-15 17:30 +0200 |
| Message-ID | <rVddU-7n-11@gated-at.bofh.it> |
| In reply to | #1444330 |
Am Freitag, 15 Juli 2016, 14:33:47 schrieb Mark Rutland: > On Fri, Jul 15, 2016 at 09:26:10AM -0400, Vivek Goyal wrote: > > On Fri, Jul 15, 2016 at 09:31:02AM +0200, Arnd Bergmann wrote: > > > On Thursday, July 14, 2016 10:44:14 PM CEST Thiago Jung Bauermann wrote: > > > > Am Donnerstag, 14 Juli 2016, 10:29:11 schrieb Arnd Bergmann: > > > > > Right, but the question remains whether this helps while you allow > > > > > the > > > > > boot loader to modify the dtb. If an attacker gets in and cannot > > > > > modify > > > > > the kernel or initid but can modify the DT, a successful attack > > > > > would > > > > > be a bit harder than having a modified kernel, but you may still > > > > > need > > > > > to treat the system as compromised. > > > > > > > > Yes, and the same question also remains regarding the kernel command > > > > line. > > > > > > > > We can have the kernel perform sanity checks on the device tree, > > > > just as the kernel needs to sanity check the command line. > > > > > > > > There's the point that was raised about not wanting to increase the > > > > attack surface, and that's a valid point. But at least in the way > > > > Petitboot works today, it needs to modify the device tree and pass > > > > it to the kernel. > > > > > > > > One thing that is unavoidable to come from userspace is > > > > /chosen/linux,stdout-path, because it's Petitboot that knows from > > > > which > > > > console the user is interacting with. The other modification to set > > > > properties in vga@0 can be done in the kernel. > > > > > > > > Given that on DTB-based systems /chosen is an important and > > > > established way to pass information to the operating system being > > > > booted, I'd like to suggest the following, then: > > > > > > > > Extend the syscall as shown in this RFC from Takahiro AKASHI, but > > > > instead of accepting a complete DTB from userspace, the syscall > > > > would accept a DTB containing only a /chosen node. If the DTB > > > > contains any other node, the syscall fails with EINVAL. The kernel > > > > can then add the properties in /chosen to the device tree that it > > > > will pass to the next kernel. > > > > > > > > What do you think? > > > > > > I think that helps, as it makes the problem space correspond to that > > > of modifying the command line, but I can still come up with countless > > > attacks based on modifications of the /chosen node and/or the command > > > line, in fact it's probably easier than any other node. > > > > I don't know anything about DTB. So here comes a very basic question. > > Does DTB allow passing an executable blob to kernel or pass the > > location of some unsigned executable code at kernel level. I think from > > secureboot point of view that would be a concern. Being able to trick > > kernel to execute an unsigned code at privileged level. > > The DTB itself won't contain executable code. > > However, arbitrary bindings could point kernel at such code. For > instance, /chosen/linux,uefi-system-table could point the kernel at a > faked EFI system table, with pointers to malicious code. So > arbitrary modification of /chosen is not safe. PowerPC doesn't have UEFI so this option is not a concern in that architecture. I'm having a look at what a PowerPC kernel gets from /chosen and haven't found anything of concern so far, but I'm still looking. On the other hand, the kernel command line has the option acpi_rsdp, which is used to pass the address of the RSDP. I don't really know much about EFI so I'm not sure if it can be used to point to code that the kernel can execute, but it does point to tables that contain AML code. > Bindings describe arbitrary system features (devices, firmware > interfaces, etc), so in general they might provide mechanisms to execute > code. Even bindings in /chosen? -- []'s Thiago Jung Bauermann IBM Linux Technology Center
[toc] | [prev] | [next] | [standalone]
| From | Mark Rutland <mark.rutland@arm.com> |
|---|---|
| Date | 2016-07-15 17:50 +0200 |
| Message-ID | <rVdxg-dW-19@gated-at.bofh.it> |
| In reply to | #1444373 |
On Fri, Jul 15, 2016 at 12:29:09PM -0300, Thiago Jung Bauermann wrote: > Am Freitag, 15 Juli 2016, 14:33:47 schrieb Mark Rutland: > > On Fri, Jul 15, 2016 at 09:26:10AM -0400, Vivek Goyal wrote: > > > I don't know anything about DTB. So here comes a very basic question. > > > Does DTB allow passing an executable blob to kernel or pass the > > > location of some unsigned executable code at kernel level. I think from > > > secureboot point of view that would be a concern. Being able to trick > > > kernel to execute an unsigned code at privileged level. > > > > The DTB itself won't contain executable code. > > > > However, arbitrary bindings could point kernel at such code. For > > instance, /chosen/linux,uefi-system-table could point the kernel at a > > faked EFI system table, with pointers to malicious code. So > > arbitrary modification of /chosen is not safe. > > PowerPC doesn't have UEFI so this option is not a concern in that > architecture. I'm having a look at what a PowerPC kernel gets from /chosen > and haven't found anything of concern so far, but I'm still looking. > > On the other hand, the kernel command line has the option acpi_rsdp, which > is used to pass the address of the RSDP. I don't really know much about EFI > so I'm not sure if it can be used to point to code that the kernel can > execute, but it does point to tables that contain AML code. Please let's not conflate EFI and ACPI, the two are distinct. I believe that there aren't any ACPI tables which contain native code, or which contain pointers to native code, but I could be mistaken. It doesn't seem unlikely that malicious AML is possible, but I'm not familiar enough with AML to know how we sandbox that. From a scan of Documentation/kernel-parameters.txt, it doesn't look like there are options to override the EFI system table (or related tables), so it doesn't look like there's a trivial mechanism to trigger arbitrary code execution. It looks like efi_fake_mem could be used to trick the kernel to poke things it shouldn't, though that likely brings the system down entirely. > > Bindings describe arbitrary system features (devices, firmware > > interfaces, etc), so in general they might provide mechanisms to execute > > code. > > Even bindings in /chosen? Yes, even bindings in /chosen. As above, the linux,uefi-system-table property lives under /chosen, and provides pointers to native code. Control over this property could yield arbitrary code execution. Additionally, there are drivers that just go looking for a compatible string, and will probe regardless of where the node is in the hierarchy. e.g. clock controller drivers, memory nodes. So /chosen isn't sandboxed as such. I fear that there are many things that one could place under /chosen that could make the kernel do the wrong thing. Given the example of drivers, I'm not sure it's going to be possible to audit all the relevant code. Thanks, Mark.
[toc] | [prev] | [next] | [standalone]
| From | Russell King - ARM Linux <linux@armlinux.org.uk> |
|---|---|
| Date | 2016-07-15 15:50 +0200 |
| Message-ID | <rVbF8-7wy-21@gated-at.bofh.it> |
| In reply to | #1444319 |
On Fri, Jul 15, 2016 at 09:26:10AM -0400, Vivek Goyal wrote: > On Fri, Jul 15, 2016 at 09:31:02AM +0200, Arnd Bergmann wrote: > > I think that helps, as it makes the problem space correspond to that > > of modifying the command line, but I can still come up with countless > > attacks based on modifications of the /chosen node and/or the command > > line, in fact it's probably easier than any other node. > > I don't know anything about DTB. So here comes a very basic question. Does > DTB allow passing an executable blob to kernel or pass the location of > some unsigned executable code at kernel level. DT on ARM is a description of the hardware - it can be thought of as a set of nodes with properties attached. The properties can describe anything (we have documentation in Documentation/devicetree/bindings which describes what we expect the properties to contain.) On other architectures, DT can also contain open-firmware "functions" but I don't think there's much support in the kernel for that - maybe the PPC folk can reply on that point. It is possible that someone may, at some point, decide to create a property that points to some executable blob, but I can't think of a reason why we should ever allow such a monstrosity in mainline kernels. -- RMK's Patch system: http://www.armlinux.org.uk/developer/patches/ FTTC broadband for 0.8mile line: currently at 9.6Mbps down 400kbps up according to speedtest.net.
[toc] | [prev] | [next] | [standalone]
| From | Arnd Bergmann <arnd@arndb.de> |
|---|---|
| Date | 2016-07-15 22:30 +0200 |
| Message-ID | <rVhUd-2YB-1@gated-at.bofh.it> |
| In reply to | #1444336 |
On Friday, July 15, 2016 2:42:10 PM CEST Russell King - ARM Linux wrote: > > On other architectures, DT can also contain open-firmware "functions" > but I don't think there's much support in the kernel for that - maybe > the PPC folk can reply on that point. The open firmware runtime interface are shut down by the time we have a flattened device tree, so those are not accessible any more. IIRC SPARC leaves the open firmware interface live, but it doesn't use fdt, so that's not relevant here. However, the powerpc specific RTAS runtime services provide a similar interface to the UEFI runtime support and allow to call into binary code from the kernel, which gets mapped from a physical address in the "linux,rtas-base" property in the rtas device node. Modifying the /rtas node will definitely give you a backdoor into priviledged code, but modifying only /chosen should not let you get in through that specific method. Arnd
[toc] | [prev] | [next] | [standalone]
| From | Thiago Jung Bauermann <bauerman@linux.vnet.ibm.com> |
|---|---|
| Date | 2016-07-15 23:10 +0200 |
| Message-ID | <rViwV-3rh-3@gated-at.bofh.it> |
| In reply to | #1444553 |
Am Freitag, 15 Juli 2016, 22:26:09 schrieb Arnd Bergmann: > On Friday, July 15, 2016 2:42:10 PM CEST Russell King - ARM Linux wrote: > > On other architectures, DT can also contain open-firmware "functions" > > but I don't think there's much support in the kernel for that - maybe > > the PPC folk can reply on that point. > > The open firmware runtime interface are shut down by the time we have > a flattened device tree, so those are not accessible any more. IIRC > SPARC leaves the open firmware interface live, but it doesn't use > fdt, so that's not relevant here. > > However, the powerpc specific RTAS runtime services provide a similar > interface to the UEFI runtime support and allow to call into > binary code from the kernel, which gets mapped from a physical > address in the "linux,rtas-base" property in the rtas device node. > > Modifying the /rtas node will definitely give you a backdoor into > priviledged code, but modifying only /chosen should not let you get > in through that specific method. Except that arch/powerpc/kernel/rtas.c looks for any node in the tree called "rtas", so it will try to use /chosen/rtas, or /chosen/foo/rtas. We can forbid subnodes in /chosen in the dtb passed to kexec_file_load, though that means userspace can't use the simple-framebuffer binding via this mechanism. We also have to blacklist the device_type and compatible properties in /chosen to avoid the problem Mark mentioned. Still doable, but not ideal. :-/ -- []'s Thiago Jung Bauermann IBM Linux Technology Center
[toc] | [prev] | [next] | [standalone]
| From | Thiago Jung Bauermann <bauerman@linux.vnet.ibm.com> |
|---|---|
| Date | 2016-07-22 02:20 +0200 |
| Message-ID | <rXwm5-6uf-15@gated-at.bofh.it> |
| In reply to | #1444591 |
Am Freitag, 15 Juli 2016, 18:03:35 schrieb Thiago Jung Bauermann: > Am Freitag, 15 Juli 2016, 22:26:09 schrieb Arnd Bergmann: > > However, the powerpc specific RTAS runtime services provide a similar > > interface to the UEFI runtime support and allow to call into > > binary code from the kernel, which gets mapped from a physical > > address in the "linux,rtas-base" property in the rtas device node. > > > > Modifying the /rtas node will definitely give you a backdoor into > > priviledged code, but modifying only /chosen should not let you get > > in through that specific method. > > Except that arch/powerpc/kernel/rtas.c looks for any node in the tree > called "rtas", so it will try to use /chosen/rtas, or /chosen/foo/rtas. > > We can forbid subnodes in /chosen in the dtb passed to kexec_file_load, > though that means userspace can't use the simple-framebuffer binding via > this mechanism. > > We also have to blacklist the device_type and compatible properties in > /chosen to avoid the problem Mark mentioned. > > Still doable, but not ideal. :-/ So even if not ideal, the solution above is desirable for powerpc. We would like to preserve the ability of allowing userspace to pass parameters to the OS via the DTB, even if secure boot is enabled. I would like to turn the above into a proposal: Extend the syscall as shown in this RFC from Takahiro AKASHI, but instead of accepting a complete DTB from userspace, the syscall accepts a DTB containing only a /chosen node. If the DTB contains any other node, the syscall fails with EINVAL. If the DTB contains any subnode in /chosen, or if there's a compatible or device_type property in /chosen, the syscall fails with EINVAL as well. The kernel can then add the properties in /chosen to the device tree that it will pass to the next kernel. What do you think? -- []'s Thiago Jung Bauermann IBM Linux Technology Center
[toc] | [prev] | [next] | [standalone]
| From | Jeremy Kerr <jeremy.kerr@au1.ibm.com> |
|---|---|
| Date | 2016-07-22 03:00 +0200 |
| Message-ID | <rXwYO-6Mu-5@gated-at.bofh.it> |
| In reply to | #1448273 |
Hi Thiago, > So even if not ideal, the solution above is desirable for powerpc. We would > like to preserve the ability of allowing userspace to pass parameters to the > OS via the DTB, even if secure boot is enabled. > > I would like to turn the above into a proposal: > > Extend the syscall as shown in this RFC from Takahiro AKASHI, but instead of > accepting a complete DTB from userspace, the syscall accepts a DTB > containing only a /chosen node. If the DTB contains any other node, the > syscall fails with EINVAL. If the DTB contains any subnode in /chosen, or if > there's a compatible or device_type property in /chosen, the syscall fails > with EINVAL as well. This works for me. We could even have it as just a DTB fragment that is merged *at* the /chosen/ node of the kernel-device tree - so would not contain a /chosen node itself, and it would be impossible to provide nodes outside of /chosen. Either is fine. Thanks! Jeremy
[toc] | [prev] | [next] | [standalone]
| From | Michael Ellerman <michael@ellerman.id.au> |
|---|---|
| Date | 2016-07-22 05:00 +0200 |
| Message-ID | <rXyQW-88M-11@gated-at.bofh.it> |
| In reply to | #1448273 |
Thiago Jung Bauermann <bauerman@linux.vnet.ibm.com> writes: > Am Freitag, 15 Juli 2016, 18:03:35 schrieb Thiago Jung Bauermann: >> Am Freitag, 15 Juli 2016, 22:26:09 schrieb Arnd Bergmann: >> > However, the powerpc specific RTAS runtime services provide a similar >> > interface to the UEFI runtime support and allow to call into >> > binary code from the kernel, which gets mapped from a physical >> > address in the "linux,rtas-base" property in the rtas device node. >> > >> > Modifying the /rtas node will definitely give you a backdoor into >> > priviledged code, but modifying only /chosen should not let you get >> > in through that specific method. >> >> Except that arch/powerpc/kernel/rtas.c looks for any node in the tree >> called "rtas", so it will try to use /chosen/rtas, or /chosen/foo/rtas. >> >> We can forbid subnodes in /chosen in the dtb passed to kexec_file_load, >> though that means userspace can't use the simple-framebuffer binding via >> this mechanism. >> >> We also have to blacklist the device_type and compatible properties in >> /chosen to avoid the problem Mark mentioned. >> >> Still doable, but not ideal. :-/ > > So even if not ideal, the solution above is desirable for powerpc. We would > like to preserve the ability of allowing userspace to pass parameters to the > OS via the DTB, even if secure boot is enabled. > > I would like to turn the above into a proposal: > > Extend the syscall as shown in this RFC from Takahiro AKASHI, but instead of > accepting a complete DTB from userspace, the syscall accepts a DTB > containing only a /chosen node. If the DTB contains any other node, the > syscall fails with EINVAL. If the DTB contains any subnode in /chosen, or if > there's a compatible or device_type property in /chosen, the syscall fails > with EINVAL as well. > > The kernel can then add the properties in /chosen to the device tree that it > will pass to the next kernel. > > What do you think? I think we will inevitably have someone who wants to pass something other than a child of /chosen. At that point we would be faced with adding yet another syscall, or at best a new flag. I think we'd be better allowing userspace to pass a DTB, and having an explicit whitelist (in the kernel) of which nodes & properties are allowed in that DTB. For starters it would only contain /chosen/stdout-path (for example). But we would be able to add new nodes & properties in future. The downside is userspace would have no way of detecting the content of the white list, other than trial and error. But in practice I'm not sure that would be a big problem. cheers
[toc] | [prev] | [next] | [standalone]
| From | Thiago Jung Bauermann <bauerman@linux.vnet.ibm.com> |
|---|---|
| Date | 2016-07-22 22:50 +0200 |
| Message-ID | <rXPyp-2gI-3@gated-at.bofh.it> |
| In reply to | #1448316 |
Am Freitag, 22 Juli 2016, 12:54:28 schrieb Michael Ellerman: > Thiago Jung Bauermann <bauerman@linux.vnet.ibm.com> writes: > > So even if not ideal, the solution above is desirable for powerpc. We > > would like to preserve the ability of allowing userspace to pass > > parameters to the OS via the DTB, even if secure boot is enabled. > > > > I would like to turn the above into a proposal: > > > > Extend the syscall as shown in this RFC from Takahiro AKASHI, but > > instead of accepting a complete DTB from userspace, the syscall accepts > > a DTB containing only a /chosen node. If the DTB contains any other > > node, the syscall fails with EINVAL. If the DTB contains any subnode in > > /chosen, or if there's a compatible or device_type property in /chosen, > > the syscall fails with EINVAL as well. > > > > The kernel can then add the properties in /chosen to the device tree > > that it will pass to the next kernel. > > > > What do you think? > > I think we will inevitably have someone who wants to pass something > other than a child of /chosen. > > At that point we would be faced with adding yet another syscall, or at > best a new flag. > > I think we'd be better allowing userspace to pass a DTB, and having an > explicit whitelist (in the kernel) of which nodes & properties are > allowed in that DTB. Sounds good to me. > For starters it would only contain /chosen/stdout-path (for example). > But we would be able to add new nodes & properties in future. If we allow things outside of chosen, we can keep the offb.c hook in Petitboot and whitelist the framebuffer properties it adds to the vga node. > The downside is userspace would have no way of detecting the content of > the white list, other than trial and error. But in practice I'm not sure > that would be a big problem. For our use case in OpenPower I don't think it would be a problem, since the userspace and the kernel are developed together. -- []'s Thiago Jung Bauermann IBM Linux Technology Center
[toc] | [prev] | [next] | [standalone]
| From | Russell King - ARM Linux <linux@armlinux.org.uk> |
|---|---|
| Date | 2016-07-15 10:50 +0200 |
| Message-ID | <rV6YO-4Gq-11@gated-at.bofh.it> |
| In reply to | #1442444 |
On Wed, Jul 13, 2016 at 03:13:42PM +0200, Arnd Bergmann wrote: > On Wednesday, July 13, 2016 10:41:28 AM CEST Mark Rutland wrote: > > The big question is whether this is a realistic case on a secure boot > > system. > > What does x86 do here? I assume changes to the command line are also > limited. They aren't. You can specify /anything/ even with a fully-signed kernel and initrd, which was one of the things I pointed out in my previous set of responses. -- RMK's Patch system: http://www.armlinux.org.uk/developer/patches/ FTTC broadband for 0.8mile line: currently at 9.6Mbps down 400kbps up according to speedtest.net.
[toc] | [prev] | [next] | [standalone]
| From | Vivek Goyal <vgoyal@redhat.com> |
|---|---|
| Date | 2016-07-15 15:10 +0200 |
| Message-ID | <rVb2q-7js-5@gated-at.bofh.it> |
| In reply to | #1444071 |
On Fri, Jul 15, 2016 at 09:49:25AM +0100, Russell King - ARM Linux wrote: > On Wed, Jul 13, 2016 at 03:13:42PM +0200, Arnd Bergmann wrote: > > On Wednesday, July 13, 2016 10:41:28 AM CEST Mark Rutland wrote: > > > The big question is whether this is a realistic case on a secure boot > > > system. > > > > What does x86 do here? I assume changes to the command line are also > > limited. > > They aren't. You can specify /anything/ even with a fully-signed kernel > and initrd, which was one of the things I pointed out in my previous > set of responses. Yes, kernel command line is not signed. For that matter even initird is not signed. Just kernel is signed and its signatures are verified. Idea is an unsigned code should not be able to execute in kernel space. Vivek
[toc] | [prev] | [next] | [standalone]
| From | Mark Rutland <mark.rutland@arm.com> |
|---|---|
| Date | 2016-07-13 11:40 +0200 |
| Message-ID | <rUoO5-17A-11@gated-at.bofh.it> |
| In reply to | #1441972 |
On Wed, Jul 13, 2016 at 10:36:14AM +0800, Dave Young wrote: > But consider we can kexec to a different kernel and a different initrd so there > will be use cases to pass a total different dtb as well. It depends on what you mean by "a different kernel", and what this implies for the DTB. I expect future arm64 Linux kernels to function with today's DTBs, and the existing boot protocol. The kexec_file_load syscall already has enough information for the kernel to inject the initrd and bootargs properties into a DTB. In practice on x86 today, kexec_file_load only supports booting to a Linux kernel, because the in-kernel purgatory only implements the x86 Linux boot protocol. Analagously, for arm64 I think that the first kernel should use its internal copy of the boot DTB, with /chosen fixed up appropriately, assuming the next kernel is an arm64 Linux image. If booting another OS, the only parts of the DTB I would expect to change are the properties under chosen, as everything else *should* be OS-independent. However the other OS may have a completely different boot protocol, might not even take a DTB, and will likely need a compeltely different purgatory implementation. So just allowing the DTB to be altered isn't sufficient for that case. There might be cases where we want a different DTB, but as far as I can tell we have nothing analagous on x86 today. If we do need this, we should have an idea of what real case(s) were trying to solve. Thanks, Mark.
[toc] | [prev] | [next] | [standalone]
| From | AKASHI Takahiro <takahiro.akashi@linaro.org> |
|---|---|
| Date | 2016-07-13 19:40 +0200 |
| Message-ID | <rUwiC-6ch-13@gated-at.bofh.it> |
| In reply to | #1442260 |
Apologies for the slow response. I'm attending LinuxCon this week. On Wed, Jul 13, 2016 at 10:34:47AM +0100, Mark Rutland wrote: > On Wed, Jul 13, 2016 at 10:36:14AM +0800, Dave Young wrote: > > But consider we can kexec to a different kernel and a different initrd so there > > will be use cases to pass a total different dtb as well. > > It depends on what you mean by "a different kernel", and what this > implies for the DTB. > > I expect future arm64 Linux kernels to function with today's DTBs, and > the existing boot protocol. The kexec_file_load syscall already has > enough information for the kernel to inject the initrd and bootargs > properties into a DTB. > > In practice on x86 today, kexec_file_load only supports booting to a > Linux kernel, because the in-kernel purgatory only implements the x86 > Linux boot protocol. Analagously, for arm64 I think that the first > kernel should use its internal copy of the boot DTB, with /chosen fixed > up appropriately, assuming the next kernel is an arm64 Linux image. > > If booting another OS, the only parts of the DTB I would expect to > change are the properties under chosen, as everything else *should* be > OS-independent. However the other OS may have a completely different > boot protocol, might not even take a DTB, and will likely need a > compeltely different purgatory implementation. So just allowing the DTB > to be altered isn't sufficient for that case. > > There might be cases where we want a different DTB, but as far as I can > tell we have nothing analagous on x86 today. If we do need this, we > should have an idea of what real case(s) were trying to solve. What I had in my mind was: - Kdump As Russel said, we definitely need to modify dtb. In addition to bootargs and initrd proerties (FYI, in my arm64 implementation for arm64, eflcorehdr info is also passed as DT property), we may want to remove unnecessary devices and even add a dedicated storage device for storing a core dump image. - Say, booting BE kernel on ACPI LE kernel In this case, there is no useful dtb in the kernel. Have said that, as Mark said, we may be able to use normal kexec_load system call if we don't need a "secure" kexec. BTW, why doesn't the current kexec_load have ability of verifying a signature of initramfs image? Is IMA/EVM expected to be used at runtime? Thanks, -Takahiro AKASHI > Thanks, > Mark.
[toc] | [prev] | [next] | [standalone]
| From | Mark Rutland <mark.rutland@arm.com> |
|---|---|
| Date | 2016-07-13 20:10 +0200 |
| Message-ID | <rUwLD-6Du-7@gated-at.bofh.it> |
| In reply to | #1442696 |
On Thu, Jul 14, 2016 at 02:38:06AM +0900, AKASHI Takahiro wrote: > Apologies for the slow response. I'm attending LinuxCon this week. > > On Wed, Jul 13, 2016 at 10:34:47AM +0100, Mark Rutland wrote: > > On Wed, Jul 13, 2016 at 10:36:14AM +0800, Dave Young wrote: > > > But consider we can kexec to a different kernel and a different initrd so there > > > will be use cases to pass a total different dtb as well. > > > > It depends on what you mean by "a different kernel", and what this > > implies for the DTB. > > > > I expect future arm64 Linux kernels to function with today's DTBs, and > > the existing boot protocol. The kexec_file_load syscall already has > > enough information for the kernel to inject the initrd and bootargs > > properties into a DTB. > > > > In practice on x86 today, kexec_file_load only supports booting to a > > Linux kernel, because the in-kernel purgatory only implements the x86 > > Linux boot protocol. Analagously, for arm64 I think that the first > > kernel should use its internal copy of the boot DTB, with /chosen fixed > > up appropriately, assuming the next kernel is an arm64 Linux image. > > > > If booting another OS, the only parts of the DTB I would expect to > > change are the properties under chosen, as everything else *should* be > > OS-independent. However the other OS may have a completely different > > boot protocol, might not even take a DTB, and will likely need a > > compeltely different purgatory implementation. So just allowing the DTB > > to be altered isn't sufficient for that case. > > > > There might be cases where we want a different DTB, but as far as I can > > tell we have nothing analagous on x86 today. If we do need this, we > > should have an idea of what real case(s) were trying to solve. > > What I had in my mind was: > > - Kdump > As Russel said, we definitely need to modify dtb. I agree that *something* needs to modify the DTB to pass the cmdline and initrd properties. What I'm trying to point out that it isn't necessary that *userspace* does so for the vast majority of kexec_file_load cases. If userspace where to have to modify things dynamically, then you can't have a secure deployment. Either you don't verify signatures on things modified by userspace, giving a backdoor, or each machine has to have a local copy of (locally) trusted private keys, which comes with other risks (e.g. offline extraction of the keys). > In addition to bootargs and initrd proerties (FYI, in my arm64 > implementation for arm64, eflcorehdr info is also passed as DT > property), As pointed out, for kexec_file_load we can add code to the kernel can add bootargs and initrd properties as necessary for this case. The existing kexec_file_load prototype allows userspace to pass the required information. > we may want to remove unnecessary devices and even add a dedicated > storage device for storing a core dump image. I suspect that bringing up a minimal number of devices is better controlled by a cmdline option. In general, figuring out what is necessary and what is not is going to be board specific, so hacking the FW tables (DTB or ACPI) is not a very portable/reliable approach. Do we actually add devices in practice? More so than the above that requires special knowledge of the platform (including things that were not described in the boot DTB). In the ACPI case modifying a DTB alone is not sufficient to change the information regarding devices, as those won't be described in the DTB. It's not possible to convert ACPI to DTB in general. > - Say, booting BE kernel on ACPI LE kernel > In this case, there is no useful dtb in the kernel. If the platform only has ACPI, then you cannot boot a BE kernel to begin with. As above one cannot convert ACPI to DTB, so one would need extensive platform knowledge for this to work. I think it's fair to say that this is not a realistic/common case. > Have said that, as Mark said, we may be able to use normal kexec_load > system call if we don't need a "secure" kexec. > > BTW, why doesn't the current kexec_load have ability of verifying > a signature of initramfs image? I believe the code was written before secure boot was a concern, and in the absence of secure boot it was expected that a trusted userspace would verify signatures itself. > Is IMA/EVM expected to be used at runtime? Sorry, I'm not sure what those abbreviations mean. Could you expand them? Thanks, Mark.
[toc] | [prev] | [next] | [standalone]
| From | Arnd Bergmann <arnd@arndb.de> |
|---|---|
| Date | 2016-07-13 22:00 +0200 |
| Message-ID | <rUyu5-7yz-9@gated-at.bofh.it> |
| In reply to | #1442736 |
On Wednesday, July 13, 2016 6:58:32 PM CEST Mark Rutland wrote: > > > we may want to remove unnecessary devices and even add a dedicated > > storage device for storing a core dump image. > > I suspect that bringing up a minimal number of devices is better > controlled by a cmdline option. In general, figuring out what is > necessary and what is not is going to be board specific, so hacking the > FW tables (DTB or ACPI) is not a very portable/reliable approach. > > Do we actually add devices in practice? More so than the above that > requires special knowledge of the platform (including things that were > not described in the boot DTB). > > In the ACPI case modifying a DTB alone is not sufficient to change the > information regarding devices, as those won't be described in the DTB. > It's not possible to convert ACPI to DTB in general. A more likely scenario would be replacing ACPI tables with a DTB that describes the platform in order to use devices that the ACPI tables don't contain. > > - Say, booting BE kernel on ACPI LE kernel > > In this case, there is no useful dtb in the kernel. > If the platform only has ACPI, then you cannot boot a BE kernel to begin > with. As above one cannot convert ACPI to DTB, so one would need > extensive platform knowledge for this to work. I think what he meant was to pass a DTB to the kexec kernel in order to run BE, while the original kernel can only run LE due to ACPI. If you boot a LE kernel using DTB, the same DTB should work for a kexec boot for a BE kernel. Arnd
[toc] | [prev] | [next] | [standalone]
| From | Mark Rutland <mark.rutland@arm.com> |
|---|---|
| Date | 2016-07-14 14:50 +0200 |
| Message-ID | <rUOfx-1kh-43@gated-at.bofh.it> |
| In reply to | #1442797 |
On Wed, Jul 13, 2016 at 09:57:28PM +0200, Arnd Bergmann wrote: > On Wednesday, July 13, 2016 6:58:32 PM CEST Mark Rutland wrote: > > > > > we may want to remove unnecessary devices and even add a dedicated > > > storage device for storing a core dump image. > > > > I suspect that bringing up a minimal number of devices is better > > controlled by a cmdline option. In general, figuring out what is > > necessary and what is not is going to be board specific, so hacking the > > FW tables (DTB or ACPI) is not a very portable/reliable approach. > > > > Do we actually add devices in practice? More so than the above that > > requires special knowledge of the platform (including things that were > > not described in the boot DTB). > > > > In the ACPI case modifying a DTB alone is not sufficient to change the > > information regarding devices, as those won't be described in the DTB. > > It's not possible to convert ACPI to DTB in general. > > A more likely scenario would be replacing ACPI tables with a DTB that > describes the platform in order to use devices that the ACPI tables > don't contain. To do so, you need special knowledge of the platform, which users are unlikely to have in practice for ACPI-based platforms. So, I think that boils down to the same problem, and the same comments apply. > > > - Say, booting BE kernel on ACPI LE kernel > > > In this case, there is no useful dtb in the kernel. > > > If the platform only has ACPI, then you cannot boot a BE kernel to begin > > with. As above one cannot convert ACPI to DTB, so one would need > > extensive platform knowledge for this to work. > > I think what he meant was to pass a DTB to the kexec kernel in order > to run BE, while the original kernel can only run LE due to ACPI. I understood that. My point was that to build that DTB, you need to have knowledge of the platform that you are unlikely to have. The platform firmware may expect to interact with AML, which you can't place in DT or run in a BE context. If you need to run BE kernels on a platform, you would likely get a platform that could boot a BE kernel from the outset (i.e. one that provides a DTB), or run that code ina VM under an LE host. Thanks, Mark.
[toc] | [prev] | [next] | [standalone]
| From | Dave Young <dyoung@redhat.com> |
|---|---|
| Date | 2016-07-14 04:00 +0200 |
| Message-ID | <rUE6t-2Rt-9@gated-at.bofh.it> |
| In reply to | #1442696 |
On 07/14/16 at 02:38am, AKASHI Takahiro wrote: > Apologies for the slow response. I'm attending LinuxCon this week. > > On Wed, Jul 13, 2016 at 10:34:47AM +0100, Mark Rutland wrote: > > On Wed, Jul 13, 2016 at 10:36:14AM +0800, Dave Young wrote: > > > But consider we can kexec to a different kernel and a different initrd so there > > > will be use cases to pass a total different dtb as well. > > > > It depends on what you mean by "a different kernel", and what this > > implies for the DTB. > > > > I expect future arm64 Linux kernels to function with today's DTBs, and > > the existing boot protocol. The kexec_file_load syscall already has > > enough information for the kernel to inject the initrd and bootargs > > properties into a DTB. > > > > In practice on x86 today, kexec_file_load only supports booting to a > > Linux kernel, because the in-kernel purgatory only implements the x86 > > Linux boot protocol. Analagously, for arm64 I think that the first > > kernel should use its internal copy of the boot DTB, with /chosen fixed > > up appropriately, assuming the next kernel is an arm64 Linux image. > > > > If booting another OS, the only parts of the DTB I would expect to > > change are the properties under chosen, as everything else *should* be > > OS-independent. However the other OS may have a completely different > > boot protocol, might not even take a DTB, and will likely need a > > compeltely different purgatory implementation. So just allowing the DTB > > to be altered isn't sufficient for that case. > > > > There might be cases where we want a different DTB, but as far as I can > > tell we have nothing analagous on x86 today. If we do need this, we > > should have an idea of what real case(s) were trying to solve. > > What I had in my mind was: > > - Kdump > As Russel said, we definitely need to modify dtb. > In addition to bootargs and initrd proerties (FYI, in my arm64 > implementation for arm64, eflcorehdr info is also passed as DT > property), we may want to remove unnecessary devices and > even add a dedicated storage device for storing a core dump image. > - Say, booting BE kernel on ACPI LE kernel > In this case, there is no useful dtb in the kernel. > > Have said that, as Mark said, we may be able to use normal kexec_load > system call if we don't need a "secure" kexec. > > BTW, why doesn't the current kexec_load have ability of verifying > a signature of initramfs image? Is IMA/EVM expected to be used > at runtime? I believe there are some limitations for verify signatures in kexec_load. First kexec-tools need to be trusted, but there's no way to sign and verify signature of shared libraries. There maybe other limitations I can not remember which are also reasons why Vivek moved to current file based syscall. Thanks Dave
[toc] | [prev] | [next] | [standalone]
Page 2 of 4 — ← Prev page 1 [2] 3 4 Next page →
Back to top | Article view | linux.kernel
csiph-web