Fix makefile and loader NULL character stripping

master
Jiajie Chen 6 years ago
parent 5c33191765
commit fcfe677bcc

@ -31,7 +31,7 @@ env:
allow_failures:
matrix:
- ARCH="aarch64"
- env: ARCH="aarch64"
- os: osx
install:
@ -83,4 +83,6 @@ before_script:
script:
- cd user && make sfsimg arch=$ARCH && cd ..
- cd kernel && make build arch=$ARCH $OPTS && cd ..
- cd tests && ./test.sh && cd ..
- if [ $ARCH = riscv64 ]; then
cd tests && ./test.sh && cd ..;
fi

@ -62,8 +62,7 @@ endif
### qemu options ###
qemu_opts := \
-smp cores=$(smp) \
-append "test=biscuit/fork"
-smp cores=$(smp)
qemu_net_opts := \
-netdev type=tap,id=net0,script=no,downscript=no

@ -200,7 +200,7 @@ impl Thread {
// Check interpreter
if let Ok(loader_path) = elf.get_interpreter() {
// assuming absolute path
if let Ok(inode) = crate::fs::ROOT_INODE.lookup_follow(&loader_path[1..], FOLLOW_MAX_DEPTH) {
if let Ok(inode) = crate::fs::ROOT_INODE.lookup_follow(loader_path, FOLLOW_MAX_DEPTH) {
if let Ok(buf) = inode.read_as_vec() {
debug!("using loader {}", &loader_path);
// Elf loader should not have INTERP
@ -426,10 +426,14 @@ impl ElfExt for ElfFile<'_> {
let header = self.program_iter()
.filter(|ph| ph.get_type() == Ok(Type::Interp))
.next().ok_or("no interp header")?;
let data = match header.get_data(self)? {
let mut data = match header.get_data(self)? {
SegmentData::Undefined(data) => data,
_ => unreachable!(),
};
// skip NULL
while let Some(0) = data.last() {
data = &data[..data.len()-1];
}
let path = str::from_utf8(data)
.map_err(|_| "failed to convert to utf8")?;
Ok(path)

@ -1 +1 @@
Subproject commit 586e682f064ca124a353d992cdf365e0d8234cb7
Subproject commit 11e02349a790923ac3710159f731155f8323b94e
Loading…
Cancel
Save