Indirect branch tracking for Intel CPUs
Indirect branch tracking for Intel CPUs
Posted Mar 31, 2022 18:28 UTC (Thu) by mb (subscriber, #50428)In reply to: Indirect branch tracking for Intel CPUs by JoeBuck
Parent article: Indirect branch tracking for Intel CPUs
func = kallsym_lookup_name("unexported_function");
(*func)(args);
would also be a DMCA violation already.
The hypothesis was: IBT could to be used to technically prevent the illegal kallsym_lookup_name.
But can it prevent it?
Posted Mar 31, 2022 20:25 UTC (Thu)
by donald.buczek (subscriber, #112892)
[Link] (2 responses)
There are legitimate reasons to call a non-exported kernel function from a module. E.g. when you create a module to install a ftrace-based wrapper around a kernel function with a security problem because you can't immediately reboot into a fixed kernel for one reason or another and you are not prepared for live patching.
We recently had to do that [1] and needed to work around a missing kallsym_lookup_name, which we did with register_kprobe.
The attempt of the kernel to restrict modules reminds me of DRM. You don't really succeed, bad guys work around anyway, but you make life harder for legitimate users.
[1]: https://github.molgen.mpg.de/mariux64/fix-lpp/blob/main/f...
Posted Apr 2, 2022 1:45 UTC (Sat)
by developer122 (guest, #152928)
[Link] (1 responses)
Half-object because there would be *some* maintenance burden to making changes for out of tree code. The kernel already has to periodically sync against other upstream projects whose code it uses.
Posted Apr 6, 2022 16:34 UTC (Wed)
by immibis (subscriber, #105511)
[Link]
Posted Apr 6, 2022 16:32 UTC (Wed)
by immibis (subscriber, #105511)
[Link] (11 responses)
I believe common opinion is settled: exported functions form an arms-length public API, but if you go digging in deeply, you're a derivative work. Of course, that has not been tested in court.
Posted Apr 6, 2022 18:04 UTC (Wed)
by nybble41 (subscriber, #55106)
[Link] (10 responses)
From 17 U.S.C. § 101 <http://www.copyright.gov/title17/92chap1.html#101>:
> A “derivative work” is a work based upon one or more preexisting works, such as a translation, musical arrangement, dramatization, fictionalization, motion picture version, sound recording, art reproduction, abridgment, condensation, or any other form in which a work may be recast, transformed, or adapted. A work consisting of editorial revisions, annotations, elaborations, or other modifications, which, as a whole, represent an original work of authorship, is a “derivative work”.
What all the examples have in common is that they actually incorporate the original work—not just a reference but the actual creative expression in some form or another—as part of the derivative work. Source code or dynamically linked object code which merely *references* some external API is not a "recast, transformed, or adapted" version of that other software in the form in which it is distributed and does not resemble any of the examples given here.
I am not your lawyer, this is not legal advice, yada yada, but IMHO the idea that your original loadable kernel module should be treated as a derivative work of the kernel just because it *references* certain kernel APIs by name is completely without basis under any reasonable interpretation of US copyright law.
Posted Apr 6, 2022 23:21 UTC (Wed)
by immibis (subscriber, #105511)
[Link] (9 responses)
Posted Apr 7, 2022 0:28 UTC (Thu)
by sfeam (subscriber, #2841)
[Link] (5 responses)
"and the GPL is pointless" - Maybe you meant the LGPL? In which case I agree with you; the LGPL is in essence identical to the GPL with the addition of a promise not to get into the above endless argument.
Posted Apr 7, 2022 15:22 UTC (Thu)
by Wol (subscriber, #4433)
[Link] (1 responses)
Cue endless bikeshedding about the meaning of "non-trivial" :-)
Cheers,
Posted Apr 7, 2022 16:04 UTC (Thu)
by nybble41 (subscriber, #55106)
[Link]
a) Non-trivial code shouldn't be inlined. b) This has no bearing on the question of "GPL-only" kernel symbols as inline code isn't accessed through the symbol table. c) Inline code in headers files would have no effect on modules distributed in source form (including obfuscated source), as the source distribution doesn't include those headers. d) If the inclusion of certain nontrivial inline code is required for the interoperability for a binary module distribution this could reasonably be argued to be fair use.
Posted Apr 11, 2022 11:09 UTC (Mon)
by LtWorf (subscriber, #124958)
[Link] (2 responses)
Like there is a statically linked file on disk, there is a statically linked file in RAM.
Posted Apr 11, 2022 14:04 UTC (Mon)
by anselm (subscriber, #2796)
[Link] (1 responses)
Yes, but the result isn't distributed to others, so copyright doesn't kick in. FWIW, the GPL explicitly says that, on your own machine, you get to do whatever you want with the code, which would presumably include dynamically linking stuff to it.
IOW, I'm perfectly free to take my own copy of Harry Potter and replace all occurrences of “Albus Dumbledore” with “Alfred E. Newman”. As long as I don't distribute the result to anybody else, the fact that this has created a “derived work” of the original book is of concern to nobody except myself.
Posted Apr 12, 2022 4:20 UTC (Tue)
by calumapplepie (guest, #143655)
[Link]
Posted Apr 8, 2022 14:10 UTC (Fri)
by kronat (subscriber, #117266)
[Link] (1 responses)
s/separate files/in the cloud, and problem solved, without caring about linking.
Posted Apr 8, 2022 14:29 UTC (Fri)
by immibis (subscriber, #105511)
[Link]
Posted Apr 11, 2022 15:14 UTC (Mon)
by flussence (guest, #85566)
[Link]
I think Microsoft would vastly prefer the opposite to be true, given that they could've sued Wine users out of existence for using their ABIs if it were.
Indirect branch tracking for Intel CPUs
Indirect branch tracking for Intel CPUs
Indirect branch tracking for Intel CPUs
Indirect branch tracking for Intel CPUs
Indirect branch tracking for Intel CPUs
Indirect branch tracking for Intel CPUs
Indirect branch tracking for Intel CPUs
Indirect branch tracking for Intel CPUs
Wol
Indirect branch tracking for Intel CPUs
Indirect branch tracking for Intel CPUs
Indirect branch tracking for Intel CPUs
Dynamic linking is static after the linking has happened.
Indirect branch tracking for Intel CPUs
Indirect branch tracking for Intel CPUs
Indirect branch tracking for Intel CPUs
Indirect branch tracking for Intel CPUs