|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 6/6] RFC: tools/dm_restrict: Enable QEMU sandboxing
Apropos of our conversation on IRC, I looked at the checker script in
detail.
> #!/bin/bash
>
> domain="$1"
Just noticed this, but: OMG no `set -e'.
You probably want `set -o pipefail' too.
> dmpid=$(xenstore-read /local/domain/$domid/image/device-model-pid 2>/dev/null)
> if [[ -z "$dmpid" ]] ; then
> echo "xenstore-read failed"
> exit 1
> fi
Why do you throw away the stderr from xenstore-read ?
> failed="false"
Quotes are not needed here and seem un-idiomatic to me when the RHS is
a simple atom.
> # TEST: Process / group id
...
> # FIXME: deal with other UID configurations?
Since the test will fail if you don't do this, I think this is very
sub-critical and you could drop the fixme.
> # Example input:
> # Uid: 1193 1193 1193 1193
> input=$(grep Uid /proc/$dmpid/status)
I have commented on this grep, and the subsequent regexpery, already.
But also: you check the uid and the gid, but by duplicating the code.
Surely this could be a shell function.
> echo -n "Process UID: "
If this had been me, I would have written
begin_test "Process UID"
and then
> result="PASSED"
test_passed
> for i in {1..4}; do
> if [[ "${BASH_REMATCH[$i]}" != "$tgt_uid" ]] ; then
> result="FAILED"
> failed="true"
In particular, you open-code setting `failed' everywhere. If you miss
one then that could hide a test failure. So
test_failed
But you want to print a reason so
test_failed "got $uidorgid $actual_id wanted $tgt_id"
As a bonus, doing this now means you can fix the test output format to
be more parseable by changing the code in one place.
> if [[ "$root" != "$tgt_chroot" ]] ; then
> echo "FAILED"
You could introduce
test_condition 'root directory' "$root" != "$tgt_chroot"
which calls test_passed or test_failed as appropriate.
If you have it return the same exit status as the test, you can use it
for the uids where you would say
test_condition "one $uidorgid" $actual_id = $tgt_id || break
and the rest of the time you would have to write
test_condition 'root directory' "$root" != "$tgt_chroot" ||:
> function check_rlimit() {
> limit_name=$1
> limit_string=$2
> tgt=$3
>
> echo -n "rlimit $limit_name: "
> input=$(grep "^$limit_string" /proc/$dmpid/limits)
...
> if [[ "$input" =~
> ^$limit_string[[:space:]]*([^[:space:]]+)[[:space:]]*([^[:space:]]+)[[:space:]]*[^[:space:]]+
> ]] ; then
Because of the unfortunate format of /proc/PID/limits, you do can't
just do the
fields=($input)
trick but
fields=(${input#* })
DTRT.
Thanks,
Ian.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |