IIRC correctly, if you store a list to an environment variable, then the elements are NUL separated. I think I saw that a year ago when poking around the rc source. For example: cpu% a=(ab c d) cpu% xd /env/a ...
On Wed, Jun 4, 2025, at 9:26 AM, ron minnich wrote: > anyway, I found it, when you do this in rc: > x=y > rc writes a trailing null. > > Not sure that's needed, but it's what it does. I'm going to strip trailing > nulls in the cpu command. > > On Wed, Jun 4, 2025 at 7:55 AM ron minnich <[email protected]> wrote: >> I'll be submitting a PR to fix it, we'll see how that goes, because the >> code, as written, doesn't even give you some idea how many variables had the >> problem. >> >> I don't see that exposing those names is that big a deal, but we'll see. >> >> >> On Tue, Jun 3, 2025 at 5:15 PM Daniel Maslowski via 9fans <[email protected]> >> wrote: >>> The author of that error message might have chosen to not expose/disclose >>> the information. >>> >>> Anyway, interesting - would be really nice to see both systems integrate >>> seamlessly! >>> I have a good collection of hardware by now that would really like to see >>> this. >>> >>> On Wed, Jun 4, 2025 at 1:57 AM ron minnich <[email protected]> wrote: >>>> well, here's a fun one. >>>> >>>> I've got my golang cpu command working on plan 9. So I'm working to have >>>> my plan 9 cpu connect to a linux vmx guest running my golang cpud. >>>> >>>> The linux kernel has the initramfs builtin, so ... one file for vmx to >>>> worry about, and 0 disk images. >>>> >>>> side note: qemu was choking on this kernel somehow, but vmx ran it just >>>> fine. I like vmx much more than qemu at this point. I prefer to test these >>>> linux kernels on vmx now. >>>> >>>> The goal is to have a linux appliance process, where it is easy to (e.g.) >>>> run python3. So the only thing embedded in the linux kernel is u-root >>>> programs and a cpud. You should be able to cd to the root of a linux file >>>> system, and say >>>> linux usr/bin/python3 >>>> where linux is a wrapper for vmx, and have it work. We had this on akaros. >>>> It's handy. >>>> >>>> The only big problem will be the plethora of symlinks in linux images, but >>>> I have a workaround for that, so we'll see. >>>> >>>> Anyway, plan 9 cpu was connecting to linux cpud, mounts were happening, >>>> and so on, then I got this on the cpud side: >>>> "exec: environment variable contains NUL" >>>> and the cpud exec failed. >>>> WTH? Well, it turns out, it's this in src/os/exec/exec.go. >>>> >>>> // Reject NUL in environment variables to prevent security >>>> issues (#56284); >>>> // except on Plan 9, which uses NUL as >>>> os.PathListSeparator (#56544). >>>> >>>> The problem is, this doesn't work if you are communicating plan 9 >>>> environment variables to Linux, and that's what we're doing. You kind of >>>> have to for cpu. I will guess I'm the first person to see this ... kind of >>>> funny. Working on it. >>>> >>>> I'm a bit annoyed that whoever wrote the test and error did this: >>>> err = errors.New("exec: environment variable contains NUL" >>>> instead of this: >>>> err = fmt.Errorf"%q:exec: environment variable contains NUL", kv) >>>> since it's always kind of nice to produce useful error messages :-) >>>> but at least I got something! >>>> >>>> btw, my talk, the paper, and the code for vmthreads is mirrored to >>>> github.com/rminnich/vmproc. >>>> >>>> >>>> > *9fans <https://9fans.topicbox.com/latest>* / 9fans / see discussions > <https://9fans.topicbox.com/groups/9fans> + participants > <https://9fans.topicbox.com/groups/9fans/members> + delivery options > <https://9fans.topicbox.com/groups/9fans/subscription> Permalink > <https://9fans.topicbox.com/groups/9fans/T9b0ff93502ee4130-M4f596cca3cc878419a13fb26> ------------------------------------------ 9fans: 9fans Permalink: https://9fans.topicbox.com/groups/9fans/T9b0ff93502ee4130-M9f93c78b692bce940fbd2461 Delivery options: https://9fans.topicbox.com/groups/9fans/subscription
