How do return values of Linux syscalls end up in "errno"? And why does
 kernel code return negated error codes all the time?

 http://nullprogram.com/blog/2016/09/23/