summaryrefslogtreecommitdiff
path: root/sys/dev/wscons
AgeCommit message (Collapse)Author
2021-12-30Prevent a double free by assigning the new keymap and corresponding sizeAnton Lindqvist
after the allocation and initialization is done. Otherwise, a race is possible if malloc ends up sleeping. ok sashan@ Reported-by: syzbot+7f8224e9f1a3487caf25@syzkaller.appspotmail.com
2021-10-22One could end up with the wrong encoding in xenocara while having a uccAnton Lindqvist
keyboard attached and /etc/kbdtype being present. The advertised encoding of a wsmux is a bit fragile as the last attached device will dictate it. If this happens to be a ucc keyboard, KB_US will always be the advertised encoding as its encoding is immutable and /etc/kbdtype is ignored. Instead, do not advertise the encoding for ucc devices when the parent mux queries its attached devices. However, asking the device directly (i.e. bypassing the mux) still returns the encoding as wsconsctl(8) would otherwise report an error. Thanks to landry@ for the report and testing.
2021-09-22Prevent ucc keyboards from changing the wsmux keyboard layout.Anton Lindqvist
ok deraadt@
2021-09-20Changing the encoding of a ucc keyboard doesn't make sense as only oneAnton Lindqvist
encoding is supported. Instead, silently ignore such requests. Gets rid of the following warning emitted by kbd(8) while booting with a ucc keyboard attached and /etc/kbdtype being present: kbd: unsupported encoding uk on /dev/wskbd2 I ended up repurposing KB_MACHDEP as is became unused back in 2008. Note that running a kernel with this commit applied requires kbd and wsconsctl to be recompiled in order to show correct encodings. Problem reported by landry@ and ok deraadt@
2021-03-24Improve the tap detection mechanism.Ulf Brosziewski
Revision 1.29 of wstpad.c has removed the 'maxdist' checks for multi-finger taps. While this change makes tap detection more reliable, and does not affect inputs intended for pointer movement, it might interfere with short scroll gestures. This version reorganizes the filtering code, and reintroduces a weaker version of those checks for MT touchpads.
2021-03-24Make tap detection less restrictive for multi-finger taps.Ulf Brosziewski
In order to distinguish tap gestures from short movements, the mechanism checks whether the distance between the first and the last position of a touch exceeds the 'maxdist' limit. Some touchpads provide unreliable coordinates when more than one contact is being made simultaneously, and in this case the filter may be too strong - and superfluous, because only one-finger contacts should trigger pointer movement.
2021-03-21Include wstpad allocations when cleaning up wsmouse resources.Ulf Brosziewski
ok gnezdo@
2021-03-12Add WSDISPLAYIO_DEPTH_30 in order to support 30-bit color support.Mark Kettenis
ok jsg@
2021-03-03Add a configurable button mapping for tap gestures on touchpads.Ulf Brosziewski
Thanks to RJ Johnson for this work! ok mpi@
2021-02-09ddb: when a new wsdisplay console attaches, resize ddb cols/rows to itJoshua Stein
ok visa
2021-01-09Revert mistaken commit: Stop wsmux_attach_sc race from anton@gnezdo
2021-01-09Stop wsmux_attach_sc race from anton@gnezdo
OK millert@
2020-12-25Refactor klist insertion and removalVisa Hankala
Rename klist_{insert,remove}() to klist_{insert,remove}_locked(). These functions assume that the caller has locked the klist. The current state of locking remains intact because the kernel lock is still used with all klists. Add new functions klist_insert() and klist_remove() that lock the klist internally. This allows some code simplification. OK mpi@
2020-12-06Fix yet another wscons race. In the same subsystem, the followinganton
properties must always hold true: 1. A device (wsmouse0 is this scenario) can only be opened in rw mode once. Such device cannot be a child of a wsmux at this point as it operates on its own event queue. 2. A device being a child of a wsmux must use the wsmux event queue assuming the wsmux is open. Otherwise, its event queue must be NULL. There's a race in wsmux_attach_sc() allowing a device to be part of a mux while using its own event queue. This in turn can cause a NULL pointer deference in wsevent_fini() while closing the same device. The solution is to check if the race was lost, i.e. another thread managed to open the device in rw mode while sleeping in wsmux_attach_sc(). ok gnezdo@ visa@ Reported-by: syzbot+684707f0312345a090ef@syzkaller.appspotmail.com
2020-11-02Enable brightness keys on powerbooks where the keyboard attaches as ukbd(4).tobhe
ok kn@
2020-10-01Add astfb(4), a driver for the framebuffer of the Aspeed BMC found onMark Kettenis
many POWER8 and POWER9 systems.
2020-09-13Fix various typos in wscons(4) comments.Frederic Cambus
2020-09-03The "USL" VT switch and keyboard ioctls are a hack and don't follow theMark Kettenis
proper BSD way where the third argument is always a pointer and data is transferred between userland and kernel using copyin(9) and copyout(9). Intead an int is encoded in the thirs argument. This works on 32-bit architectures and little-endian 64-bit architectures. But not on big-endian 64-bit architectures. Deal with this by handling the argument as long (which matches the size of a pointer). Hopefully we can eliminate these ioctls in the near future. ok deraadt@
2020-08-05Allow the WSDISPLAYIO_GETSCREENTYPE ioctl on the tty*cfg device, passingFrederic Cambus
it back to tty*0. This is needed to restore working defaults in wsfontload(8). OK jcs@, mpi@
2020-07-29Fix yet another panic in which wsevent_fini() ends up being called withanton
NULL. This one is a race caused by clearing the me_evp member before calling routines that could end up sleeping. While here, make wsmux_mux_close() look more like the other mux close routines for increased symmetry. ok mpi@ Reported-by: syzbot+fb9ad34ba42994683850@syzkaller.appspotmail.com
2020-05-29dev/rndvar.h no longer has statistical interfaces (removed during variousTheo de Raadt
conversion steps). it only contains kernel prototypes for 4 interfaces, all of which legitimately belong in sys/systm.h, which are already included by all enqueue_randomness() users.
2020-05-25change wsdisplay attribute type from long to uint32_tJonathan Gray
miod explained it was initially a long as it was thought drivers may need to allocate storage but in practice they don't need more than 32 bits for an attribute. suggested and reviewed by miod@
2020-05-25rename wsdisplay alloc_attr() to pack_attr()Jonathan Gray
Suggested by John Carmack. miod agrees a rename would make sense and explained it was initially thought drivers may need to allocate storage but in practice they don't need more than 32 bits for an attribute. ok mpi@
2020-05-10Fix two out-of-bounds array accesses in ioctl code pats. One found byMark Kettenis
johnc@armadilloaerospace.com and another one spotted by matthieu@. ok benno@, matthieu@, deraadt@
2020-04-26Make explicit and enforce that WSCREEN and WSEMUL names are 0-terminated.Ulf Brosziewski
CID 1452993 (BUFFER_SIZE_WARNING) CID 1453314 (BUFFER_SIZE_WARNING) ok kettenis@
2020-04-26Remove unused assignments.Ulf Brosziewski
CID 1453143 ok kettenis@
2020-04-19Move logic to change brightness level in reasonable steps from acpivout(4)Mark Kettenis
into wsdisplay(4). This code is now exposed through wsdisplay_brightness_{step,zero,cycle} functions that can be called by any driver that handles brightnes "hotkeys". These functions take a wsdisplay(4) device pointer as their first argument, which should be provided if a clear association between events and a particular display exist. This is used in wskbd(4). Otherwise NULL can be passed and the code will direct the request at the first wsdisplay(4) that implements brightness adjustment. Tested by many. Fixes brightness keys on x395 and other thinkpads with AMD graphics. ok patrick@
2020-04-07Abstract the head of knote lists. This allows extending the lists,Visa Hankala
for example, with locking assertions. OK mpi@, anton@
2020-03-24Backout the rename, it was more confusing then helpful.anton
2020-03-24Remove a chatty debug printf (not enabled by default) in wskbdopen() andanton
wsmouseopen(); bringing them closer to wsmuxopen(). No functional change.
2020-03-24Rename wsmousedoioctl() -> wmouse_do_ioctl() and follow the sameanton
convention for the open routine. This increases the consistency between wskbd, wsmouse and wsmux.
2020-03-24Ensure that me_evp is still NULL before assignment during open of wsconsanton
devices. This condition is checked early on during open but since the same routine could end up sleeping before assigning me_evp, a race against adding the same wscons device to a wsmux could be lost. This in turn can cause a NULL deference during close. ok mpi@ Reported-by: syzbot+34c3041bfd96c888c8bd@syzkaller.appspotmail.com
2020-03-22Mark omissions of break statements as intentional.Ulf Brosziewski
CID 1453207 (Missing break in switch)
2020-03-22zap trailing whitespaceanton
2020-03-03Add WSDISPLAY_TYPE_RKDRMMark Kettenis
ok patrick@, jsg@
2020-02-20Replace field f_isfd with field f_flags in struct filterops to allowVisa Hankala
adding more filter properties without cluttering the struct. OK mpi@, anton@
2020-01-08Unify handling of ioctls FIOSETOWN/SIOCSPGRP/TIOCSPGRP andVisa Hankala
FIOGETOWN/SIOCGPGRP/TIOCGPGRP. Do this by determining the meaning of the ID parameter inside the sigio code. Also add cases for FIOSETOWN and FIOGETOWN where there have been TIOCSPGRP and TIOCGPGRP before. These changes allow removing the ID translation from sys_fcntl() and sys_ioctl(). Idea from NetBSD OK mpi@, claudio@
2019-12-31Use C99 designated initializers with struct filterops. In addition,Visa Hankala
make the structs const so that the data are put in .rodata. OK mpi@, deraadt@, anton@, bluhm@
2019-10-13Convert all tsleep(9) calls to tsleep_nsec(9) in wsdisplay(4).Frederic Cambus
OK ratchov@, visa@
2019-10-13Move ws_get_param/ws_set_param into wsdisplay code.Mark Kettenis
ok deraadt@, jsg@
2019-08-31Fix a bug of the tap-detection code.Ulf Brosziewski
Do not switch from the DETECT state to IGNORE when the last (active) touch has been released. Otherwise, depending on how events are reported and synchronized, it may happen that the handler does not switch back to DETECT when necessary.
2019-08-19Add a configuration option for reverse scrolling.Ulf Brosziewski
ok patrick@
2019-08-08wskbd, wsmouse(4): tsleep(9) -> tsleep_nsec(9); ok mpi@ kn@cheloha
2019-07-01Use timeout_add_msec(9)kn
Trivial conversion from ticks to milliseconds where macros already come in milliseconds and timeout values only need reduction by hz to use the new API. OK mpi
2019-05-24Remove redundant conditional. Inspecting flags is the correct way toanton
determine if the device was opened in read/write mode. ok mpi@ visa@
2019-05-22Cleanup debug macros in wscons. Favor __func__ over spelling out the actualanton
function name in order to reduce grep noise. Also, some of them where referring to the wrong function.
2019-05-22A wscons device may only be opened in read/write mode once. However,anton
after checking for exclusive access, malloc() can sleep in wsevent_init() opening up for a potential race where more than one thread may be able open the device. Prevent this by checking if the race was won after calling malloc(). While here, switch to mallocarray as proposed by both cheloha@ and mpi@ ok mpi@
2019-05-21A problem fixed in wskbd is also present in wsmux. Repeating theanton
previous commit message: In wsmuxclose(), use the same logic as in wsmuxopen() to determine if the device was opened in write-only mode. Relying on me_evar being NULL does not work if the wsmux device was opened first followed attaching it to another wsmux. Closing the wsmux device first at this stage would cause the wscons_event queue inherited from the parent wsmux to be freed. This in turn could cause a panic if an ioctl(WSMUXIO_INJECTEVENT) command is issued on parent wsmux device. ok mpi@ visa@ Reported-by: syzbot+f6c2ed7901eb4b970720@syzkaller.appspotmail.com
2019-05-11Add the colemak keyboard layout.Aaron Bieber
OK deraadt@
2019-05-04Improve the interaction between efifb(4), inteldrm(4) and radeondrm(4)Mark Kettenis
when we have a serial console by introducing the notion of a "primary" graphics device. The primary graphics device is the one set up and used by firmware (BIOS, UEFI). The goal is to make sure that wsdisplay0 and drm0 reliably attach to the primary graphics device such that X works out of the box even if you have multiple cards or if you are using a serial console. This also fixes the situation where inteldrm(4) or radeondrm(4) would take over the console on UEFI systems even if the kernel was booted with a serial console. ok jsg@