summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2017-11-30libsec: make includes consistent for sha2block*.ccinap_lenrek
2017-11-30libsec: unroll portable sha1block functioncinap_lenrek
just 6-10% slower than most assembly versions. 20% faster on zynq.
2017-11-30libsec: unroll portable sha2block functionscinap_lenrek
- unroll the loops - rotate the taps on each step, avoiding copies - simplify boolean formulas for Ch() and Maj() this yields arround 40% throughput increase on 32/64bit archs for sha2_256 and sha2_512 on amd64.
2017-11-27games/blit: update screen when display address changes (thanks aap)aiju
2017-11-27vmx(1): fix openbsd 6.2 amd64 !entrystate bugaiju
2017-11-27libsec: optimize aesCBCencrypt()/aesCBCdecrypt()cinap_lenrek
- get rid of the temporary copies and memmoves() - when the data pointer is aligned, do xor and copying inline speedup for auth/aescbc encryption depends on arch: - zynq 7% (arm) - t23 13% (386) - x230 20% (amd64, aes-ni) - apu2 25% (amd64, aes-ni)
2017-11-26cga: capture cga console contents on boot, make sure cgapos is in rangecinap_lenrek
to capture bios and bootloader messages, convert the contents on the screen to kmesg. on machines without legacy cga, the cga registers read out as 0xFF, resuting in out of bounds cgapos. so set cgapos to 0 in that case.
2017-11-26devvga: re-render text from kmesg after resizecinap_lenrek
2017-11-22spin: Update to most recent version. (thanks Ori_B)cinap_lenrek
from Ori_B: There were a small number of changes needed from the tarball on spinroot.org: - The mkfile needed to be updated - Memory.h needed to not be included - It needed to invoke /bin/cpp instead of gcc -E - It depended on `yychar`, which our yacc doesn't provide. I'm still figuring out how to use spin, but it seems to do the right thing when testing a few of the examples: % cd $home/src/Spin/Examples/ % spin -a peterson.pml % pcc pan.c -D_POSIX_SOURCE % ./6.out (Spin Version 6.4.7 -- 19 August 2017) + Partial Order Reduction Full statespace search for: never claim - (none specified) assertion violations + acceptance cycles - (not selected) invalid end states + State-vector 32 byte, depth reached 24, errors: 0 40 states, stored 27 states, matched 67 transitions (= stored+matched) 0 atomic steps hash conflicts: 0 (resolved) Stats on memory usage (in Megabytes): 0.002 equivalent memory usage for states (stored*(State-vector + overhead)) 0.292 actual memory usage for states 128.000 memory used for hash table (-w24) 0.534 memory used for DFS stack (-m10000) 128.730 total actual memory usage unreached in proctype user /tmp/Spin/Examples/peterson.pml:20, state 10, "-end-" (1 of 10 states) pan: elapsed time 1.25 seconds pan: rate 32 states/second
2017-11-20libsec: write optimized _chachablock() function for amd64 / sse2cinap_lenrek
doing 4 quarterround's in parallel using 128-bit vector registers. for second round shuffle the columns and then shuffle back. code is rather obvious. only trick here is for the first quaterround PSHUFLW/PSHUFHW is used to swap the halfwords for the <<<16 rotation.
2017-11-19libmach: fix format for 8db sse shift opscinap_lenrek
2017-11-196l: fix typo in optab table for APSLLQ (0x7e -> 0x73)cinap_lenrek
2017-11-19kernel: make isaconfig() consistent, not inplace tokenizing the conf stringcinap_lenrek
2017-11-19inst/mounthjfs: use /dev/swap instead of #c/swap to determine memory size ↵cinap_lenrek
(thanks aap)
2017-11-186in4: add -m mtu option to specify outer MTUcinap_lenrek
instead of hardcoding the tunnel interface MTU to 1280, we calculate the tunnel MTU from the outside MTU, which can now be specified with the -m mtu option. The deault outside MTU is 1500 - 8 (PPPoE).
2017-11-169pc64: handle special case in fpurestore() for procexec()/procsetup()cinap_lenrek
when a process does an exec, it calls procsetup() which unconditionally sets the sets the TS flag and fpstate=FPinit and fpurestore() should not revert the fpstate.
2017-11-16audio/flacdec: add eof handler avoiding endless spinning on broken files ↵cinap_lenrek
(thanks deuteron)
2017-11-14pc64: fix mistake fpurestore() mistakecinap_lenrek
cannot just reenable the fpu in FPactive case as we might have been procsaved() an rescheduled on another cpu. what was i thinking... thanks qu7uux for reproducing the problem.
2017-11-13igfx: allocate backing memory for framebuffer and hw cursor when not done by ↵cinap_lenrek
bios (from qu7uux) new approach to graphics memory management: the kernel driver never really cared about the size of stolen memory directly. that was only to figure out the maximum allocation to place the hardware cursor image somewhere at the end of the allocation done by bios. qu7uux's gm965 bios however wont steal enougth memory for his native resolution so we have todo it manually. the userspace igfx driver will figure out how much the bios allocated by looking at the gtt only. then extend the memory by creating a "fixed" physical segment. the kernel driver allocates the memory for the cursor image from normal kernel memory, and just maps it into the gtt at the end of the virtual kernel framebuffer aperture. thanks to qu7uux for the patch.
2017-11-12libsec: AES-NI support for amd64cinap_lenrek
Add assembler versions for aes_encrypt/aes_decrypt and the key setup using AES-NI instruction set. This makes aes_encrypt and aes_decrypt into function pointers which get initialized by the first call to setupAESstate(). Note that the expanded round key words are *NOT* stored in big endian order as with the portable implementation. For that reason the AESstate.ekey and AESstate.dkey fields have been changed to void* forcing an error when someone is accessing the roundkey words. One offender was aesXCBmac, which doesnt appear to be used and the code looks horrible so it has been deleted. The AES-NI implementation is for amd64 only as it requires the kernel to save/restore the FPU state across syscalls and pagefaults.
2017-11-12pc64: allow using the FPU in syscall and pagefault handlerscinap_lenrek
The aim is to take advantage of SSE instructions such as AES-NI in the kernel by lazily saving and restoring FPU state across system calls and pagefaults. (everything can can do I/O) This is accomplished by the functions fpusave() and fpurestore(). fpusave() remembers the current state and disables the FPU if it was active by setting the TS flag. In case the FPU gets used, the current state gets saved and a new PFPU.fpslot is allocated by mathemu(). fpurestore() restores the previous FPU state, reenabling the FPU if fpusave() disabled it. In the most common case, when userspace is not using the FPU, then fpusave()/fpurestore() just toggle the FPpush bit in up->fpstate. When the FPU was active, but we do not use the FPU, then nothing needs to be saved or restored. We just switched the TS flag on and off agaian. Note, this is done for the amd64 kernel only.
2017-11-08pc64: set ts flag before schedinit()cinap_lenrek
2017-11-04mergecinap_lenrek
2017-11-04kernel: introduce per process FPU struct (PFPU) for more flexible machine ↵cinap_lenrek
specific fpu handling introducing the PFPU structue which allows the machine specific code some flexibility on how to handle the FPU process state. for example, in the pc and pc64 kernel, the FPsave structure is arround 512 bytes. with avx512, it could grow up to 2K. instead of embedding that into the Proc strucutre, it is more effective to allocate it on first use of the fpu, as most processes do not use simd or floating point in the first place. also, the FPsave structure has special 16 byte alignment constraint, which further favours dynamic allocation. this gets rid of the memmoves in pc/pc64 kernels for the aligment. there is also devproc, which is now checking if the fpsave area is actually valid before reading it, avoiding debuggers to see garbage data. the Notsave structure is gone now, as it was not used on any machine.
2017-11-02/lib/rsc: It only works when we're in the process of preparing a release.stanley lieber
2017-11-02tinc(8): mash -> meshcinap_lenrek
2017-11-01tinc(8): more spelling spamcinap_lenrek
2017-11-01tinc(8): spelling, thanks jpmcinap_lenrek
2017-10-31tinc(8): outout -> outputcinap_lenrek
2017-10-31tinc: implement experimental mash peer to peer VPN from http://www.tinc-vpn.org/cinap_lenrek
2017-10-30aes(2): document aes_xts_encrypt() and aes_xts_decrypt() functionscinap_lenrek
2017-10-30kernel: pc/pc, fix comment linecinap_lenrek
2017-10-30swap(3): document permissions and encryption behaviour, reference to memory(8)cinap_lenrek
2017-10-30devcons: remove obsolete commentcinap_lenrek
2017-10-30kernel: track more header dependencies in port/portmkfilecinap_lenrek
2017-10-29devswap: fix mistakecinap_lenrek
2017-10-29kernel: introduce devswap #¶ to serve /dev/swap and handle swapfile encryptioncinap_lenrek
2017-10-29devfs: rewrite cryptio()cinap_lenrek
adjust to new aes_xts routines. allow optional offset in the 4th argument where the encrypted sectors start instead of hardcoding the 64K header area for cryptsetup. avoid allocating temporary buffer for cryptio() reads, we can just decrypt in place there. use sdmalloc() to allocate the temporary buffer for cryptio() writes so that devsd wont need to allocate and copy in case it didnt like our alignment. do not duplicate the error reporting code, just use io() that is what it is for. allow 2*256 bit keys in addition to 2*128 bit keys.
2017-10-29libsec: rewrite aex_xts_encrypt()/aes_xts_decrypt()cinap_lenrek
the previous implementation was not portable at all, assuming little endian in gf_mulx() and that one can cast unaligned pointers to ulong in xor128(). also the error code is likely to be ignored, so better abort() when the length is not a multiple of the AES block size. we also pass in full AESstate structures now instead of the expanded key longs, so that we do not need to hardcode the number of rounds. this allows each indiviaul keys to be bigger than 128 bit.
2017-10-29cwfs: use /dev/swap instead of #c/swap to determine memory sizecinap_lenrek
2017-10-28libc: improve alignment of QLp structure on amd64, cosmeticscinap_lenrek
the QLp structure used to occupy 24 bytes on amd64. with some rearranging the fields we can get it to 16 bytes, saving 8K in the data section for the 1024 preallocated structs in the ql arena. the rest of the changes are of cosmetic nature: - getqlp() zeros the next pointer, so there is no need to set it when queueing the entry. - always explicitely compare pointers to nil. - delete unused code from ape's qlock.c
2017-10-26libc: wunlock() part 2cinap_lenrek
the initial issue was that wunlock() would wakeup readers while holding the spinlock causing deadlock in libthread programs where rendezvous() would do a thread switch within the same process which then can acquire the RWLock again. the first fix tried to prevent holding the spinlock, waking up one reader at a time with releasing an re-acquiering the spinlock. this violates the invariant that readers can only wakup writers in runlock() when multiple readers where queued at the time of wunlock(). at the first wakeup, q->head != nil so runlock() would find a reader queued on runlock() when it expected a writer. this (hopefully last) fix unlinks *all* the reader QLp's atomically and in order while holding the spinlock and then traverses the dequeued chain of QLp structures again to call rendezvous() so the invariant described above holds.
2017-10-23upas/smtpd: don't call syslog() from the note handler, this can deadlockcinap_lenrek
when the alarm hits while the process is currently in syslog(), holding the sl lock, then calling syslog again will deadlock: /proc/1729193/text:386 plan 9 executable /sys/lib/acid/port /sys/lib/acid/386 acid: lstk() sleep()+0x7 /sys/src/libc/9syscall/sleep.s:5 lock(lk=0x394d8)+0xb7 /sys/src/libc/port/lock.c:25 i=0x3e8 syslog(logname=0x41c64,cons=0x0,fmt=0x41c6a)+0x2d /sys/src/libc/9sys/syslog.c:60 err=0x79732f27 d=0x0 ctim=0x0 buf=0x0 p=0x0 arg=0x0 n=0x0 catchalarm(msg=0xdfffc854)+0x7a /sys/src/cmd/upas/smtp/smtpd.c:71 notifier+0x30 /sys/src/libc/port/atnotify.c:15
2017-10-20libc: cleanup atexit and put exits() in its own compilation unitcinap_lenrek
this avoids having to pull in atexit() and its dependencies (lock(), unlock()) into every program. (as exits() is called by _main() from main9.s).
2017-10-20vt: block when sending input to host (fixes truncated paste)cinap_lenrek
2017-10-17libsec: make sectorNumber argument for aes_xts routines uvlongcinap_lenrek
2017-10-17libsec: add AES CFB and AES OFB stream cipherscinap_lenrek
2017-10-17aux/wpa: prevent PTK re-installation attack by replaying AP retransmitscinap_lenrek
this implements the mitigation suggested in section "6.5 Countermeasures" of "Key Reinstallation Attacks: Forcing Nonce Resuse in WPA2" [1]. [1] https://papers.mathyvanhoef.com/ccs2017.pdf
2017-10-16ape/libsec: fix the build, bring ape libsec.h in sync with plan9 versioncinap_lenrek
2017-10-06ssh: remove extern declarations for pkcs1padbuf() and asn1encodedigest() ↵cinap_lenrek
(now in libsec.h)