Fix makefile and loader NULL character stripping

master
Jiajie Chen 6 years ago
parent 5c33191765
commit fcfe677bcc

@ -31,7 +31,7 @@ env:
allow_failures: allow_failures:
matrix: matrix:
- ARCH="aarch64" - env: ARCH="aarch64"
- os: osx - os: osx
install: install:
@ -83,4 +83,6 @@ before_script:
script: script:
- cd user && make sfsimg arch=$ARCH && cd .. - cd user && make sfsimg arch=$ARCH && cd ..
- cd kernel && make build arch=$ARCH $OPTS && 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 options ###
qemu_opts := \ qemu_opts := \
-smp cores=$(smp) \ -smp cores=$(smp)
-append "test=biscuit/fork"
qemu_net_opts := \ qemu_net_opts := \
-netdev type=tap,id=net0,script=no,downscript=no -netdev type=tap,id=net0,script=no,downscript=no

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

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