FUSE Adding IDMAPPED Mounts Support In Linux 6.12
Merged three years ago in Linux 5.12 was IDMAPPED mounts for new use-cases from containers to systemd-homed. IDMAPPED mounts allow for different mounts to expose the same file or directory with different ownership such as for sharing files between multiple users or multiple systems. With time all of the major Linux file-systems have seen support added for IDMAPPED mounts while for Linux 6.…
phoronix.com/news/FUSE-IDMAPPE…
I have a program that differs in output depending on whether it's ran under qemu-i386 or natively. It's a 32-bit glibc binary. I cannot do source-level debugging since I don't have the source of the portion of the program where this happens. I've already tried changing the FPU registers, and compared cpuid values. I'm not sure of what else I can try.
New discovery: During the excavations in Ayanis, Türkiye, three 2,700-year-old bronze shields and a bronze helmet were respectfully discovered in a temple complex dedicated to Haldi, an Urartian deity.
Core, Extra, Multilib? Unravelling the Arch Linux Repositories
You’ll find these terms ‘strange’ when you are just starting your Arch journey (even if using Arch downstream distros like Manjaro) but you’ll come across them in various forum discussion and wiki references.
This tutorial quickly explains the di ...continues
Happy Sunday everyone !
Just something I been working on for myself. Please don't ask for it as I will never encourage you to use Alpha software. #Cosmic #FOSS #Linux #OpenSource
New blog post: "Adding citations between existing articles in Wikidata", doi.org/10.59350/7hjzg-ngr66
Thanks to @opencitations
replies to this post become blog comments.
reshared this
Labot and Pitys mated to produce Hubers.
They are a Generation 11 fractal.
Their favorite color is green.
If this flame is beautiful, ⭐ or boost this post to improve its chances for future breedings.
#fractal
Hubers twitches.
If this flame is beautiful, ⭐ or boost this post to improve its chances for future breedings.
#fractal
mid_kid
in reply to mid_kid • • •@joxeah@mastodon.social
@AndyW
I didn't expect anyone to take interest, so I quickly put together a testing script.
github.com/mid-kid/metroskrew/…
To run it, you need an x86 or multilib amd64 gcc/glibc linux system, make, meson, qemu-user-i386 and binutils-multiarch or binutils-arm-none-eabi. On my machine, the diff of the resulting object looks like picture related. I assume it's something related to numerical computation (something in the optimization pass?).
#debugging
#ReverseEngineering
#lowlevel
mid_kid
in reply to mid_kid • • •Progress: A friend of mine pointed me towards instruction logging solutions. These are big guns, but man are they useful.
#qemu logging: qemu.org/docs/master/about/emu…
#intel pt logging: carteryagemann.com/a-practical…
(requires a rather recent cpu)
I parsed both instruction logs with grep/sed to filter out any instructions not belonging to mwccarm itself, reformatted them to output only the instruction name (not the parameters) and after a lot of fiddling I managed to get a diff that made sense.
cont...
mid_kid
in reply to mid_kid • • •This allowed me to start patching jumps to always take one specific decision (or patch the entire function out), bringing the instruction logs closer together.
And now I found the specific jump that causes the differing output.
Next step will be figuring out how to get #gdb to breakpoint on the exact differing jump, and try to trace the decision back to its origin data.
Does anyone have any tips on tools to follow data through a program?
#Debugging #ReverseEngineering #lowlevel
mid_kid
in reply to mid_kid • • •I ended up using GDB, and `watch`ing the memory it read the value from. Turns out, the most significant half of a pointer is written to the variable that's used to decide the jump.
But why does that pointer location differ between the host and QEMU? Well, the area is allocated through malloc(). When you malloc big enough chunks of memory, #glibc will allocate it using the kernel's mmap() system call, and let the kernel deal with it.
(cont...)
#linux #Debugging #ReverseEngineering #lowlevel
mid_kid
in reply to mid_kid • • •Apparently, when you request memory through mmap() on 32-bit x86, #linux will start at address 0xfffffe00, and gows downwards to look for free space. This makes the most significant half of the address quite high.
#QEMU (user mode), on the other hand, starts at TASK_UNMAPPED_BASE, which on i386 is 0x40000000, and grows upwards. This makes the upper half of the pointer lower.
Thanks to the program's undefined behavior, this is enough to affect the output...
#ReverseEngineering #Debugging