Commit graph

12253 commits

Author SHA1 Message Date
AnotherTest
be395aab9a Shell: Do not assume that the job has exited after unblock in fg 2020-08-12 11:41:18 +02:00
AnotherTest
7aa5a2bc0f Shell: Eliminate possible use-after-free in builtin_fg()
This fixes a possible UAF where the job might be destroyed in
block_on_job().
2020-08-12 11:41:18 +02:00
AnotherTest
1dc5574245 Shell: Eliminate reference leak in AST::Execute::run() 2020-08-12 11:41:18 +02:00
AnotherTest
ab3e787334 Shell: Moves pipelined processes to one process group 2020-08-12 11:41:18 +02:00
AnotherTest
8a17527bc5 Shell: Show the job id instead of the pid when a job exits in background 2020-08-12 11:41:18 +02:00
AnotherTest
29035b55b2 Kernel: Allow moving a process to a new pgrp via setpgid() 2020-08-12 11:41:18 +02:00
Ben Wiederhake
81b491a7a4 SystemMonitor: Show PPID, PGID, SID
With this information, it's a bit easier to intuit the current 'process tree'.
If you're reading this, can I convince you to implement a nice process tree for
SystemMonitor? It could be via PPID (unbounded depth), or SID+PGID (depth 3).
Or something else entirely :D
2020-08-12 11:28:45 +02:00
Ben Wiederhake
dbbdb39c1f SystemMonitor: Display the stack of only the selected thread
This uses the new ProcFS interface at /proc/<pid>/stacks/<tid>
2020-08-12 11:28:45 +02:00
Ben Wiederhake
c3df2fe83f Kernel: Expose thread stacks as separate files
This breaks SystemMonitor, which the next commit fixes.
2020-08-12 11:28:45 +02:00
Ben Wiederhake
9abac64333 Userland: Make 'tt t' spawn a thread and stand still
This is useful to test SystemMonitor and /proc, because all other multi-threaded
processes tend to be moving targets.
2020-08-12 11:28:45 +02:00
Andreas Kling
40f4ccc3ea LibWeb: Initialize tag/attribute name globals in init-time constructors 2020-08-12 11:27:44 +02:00
Nico Weber
cdf1282419 ScrollBar: Let clicking the gutter scroll by one page
Shift-clicking has the old behavior of jumping to the click position.

This matches scrollbar behavior in macOS and Windows, and in many Linux apps.
2020-08-12 11:02:30 +02:00
Nico Weber
326261094d ScrollBar: Simplify ScrollBar::scroll_to_position() 2020-08-12 11:02:30 +02:00
Nico Weber
8eee5312c5 GUI: Rename ScrollBar::scrubber_size() to ScrollBar::visibile_scrubber_size() 2020-08-12 11:02:30 +02:00
Nico Weber
cb2d56b909 GUI: Give MouseEvent shift() / ctrl() / alt() / logo() functions 2020-08-12 11:02:30 +02:00
Nico Weber
eab7712ab0 GUI: Extract a ScrollBar::scroll_to_position method 2020-08-12 11:02:30 +02:00
Ali Mohammad Pur
d1571ce00a LibTLS: Re-silence a debug log
bc7a149039 (r41386045)
2020-08-12 10:59:06 +02:00
AnotherTest
880b0a7600 LibTLS: Avoid extra initialisation of buffers that are initialised
A trace for proof:
buffer:

    L91: 0:(packet.size() - header_size)
    L98: (packet.size() - header_size):(packet.size() - header_size + mac_size)
    L102: (packet.size() - header_size + mac_size):buffer.size()
    (asserted at L103)

ct:

    L88: 0:(header_size - 2)
    L123: (header_size - 2):(header_size)
    L111: (header_size):(header_size + iv_size)
    L117: (header_size + iv_size):(header_size + iv_size + length)
    (asserted at L113)
2020-08-11 21:37:10 +02:00
AnotherTest
bc7a149039 LibCrypto+LibTLS+Kernel: Switch the Cipher::Mode interface to use Span
This shaves 2.5 more runtime seconds off 'disasm /bin/id', and makes the
Mode<T> interface a lot more allocation-friendly.
2020-08-11 21:37:10 +02:00
AnotherTest
caedd05bd8 AK: Span<T>::operator=(const T&) => Span<T>::operator=(const Span<T>&) 2020-08-11 21:37:10 +02:00
Andreas Kling
c37dc4ae73 LibC: Add sa_family_t and in_port_t types 2020-08-11 21:13:18 +02:00
Linus Groh
36c738d9bf LibJS: Assert when exception is not cleared before Interpreter::run()
This is to prevent bugs like #3091 (fixed in
9810f8872c21eaf2aefff25347d957cd26f34c2d) in the future; we generally
don't want Interpreter::run() to be called if the interpreter still has
an exception stored. Sure, it could clear those itself but letting users
of the interpreter do it explicitly seems sensible.
2020-08-11 21:08:30 +02:00
Linus Groh
1d728af5c4 LibWeb: Clear exceptions in each Document::run_javascript() call
We don't want to carry over exceptions across multiple
Document::run_javascript() calls as Interpreter::run() and every of its
exception checks will get confused - in this case there would be an
exception, but not because a certain action failed.

Real-life example:

<script>var a = {}; a.test()</script>
<script>alert("It worked!")</script>

The above HTML will invoke Document::run_javascript() twice, the first
call will result in a TypeError, which is still stored during the second
call. The interpreter will eventually call the following functions (in
order) for the alert() invocation:

- Identifier::execute()
- Interpreter::get_variable()
- Object::get() (on the global object)

That last Object::get() call has an exception check which is triggered
as we still carry around the exception from earlier - and eventually
returns an empty value.

Long story short, the second script will wrongly fail with
"ReferenceError, 'alert' is not defined".

Fixes #3091.
2020-08-11 21:08:30 +02:00
Nico Weber
f8084cc083 UserspaceEmulator: Remove some silly semicolons 2020-08-11 21:04:38 +02:00
Andreas Kling
c6ee6c0b42 UserspaceEmulator: Log unimplemented instructions with proper backtrace 2020-08-11 20:29:14 +02:00
Andreas Kling
62ec6e5fe0 Kernel: Make Inode::read_entire() return a KBuffer (not ByteBuffer)
ByteBuffer is backed by kmalloc heap memory which is a scarce resource.
This fixes an OOM panic when traversing a large directory.
2020-08-11 20:29:14 +02:00
Andreas Kling
ec93d6ffdc LibC: Add in6_addr and sockaddr_in6 structs 2020-08-11 20:29:14 +02:00
Andreas Kling
eeb9042b8e LibC: Declare sockaddr_storage
This type is guaranteed to fit the largest sockaddr_foo supported by
the system. In our case, that's sockaddr_un.
2020-08-11 20:29:14 +02:00
Andreas Kling
9ba9228a6b LibC: Make sure assert() expands to *something* in non-DEBUG builds
Sometimes people write strange things like "assert(x), something();"
and this will not work if "assert(x)" expands to "".

So make it expand to ((void)0) instead.
2020-08-11 20:29:14 +02:00
Andreas Kling
797904bafd Kernel: Forward declare struct stat in the syscall API header 2020-08-11 20:29:14 +02:00
Andreas Kling
3a13c749cd LibC: Move stat(), lstat() and fstat() to <sys/stat.h>
Dr. POSIX says that's where they belong.
2020-08-11 20:29:14 +02:00
Andreas Kling
9e55162e9b mv: Accept (but ignore) -f
Many scripts seem to use "mv -f", so let's support that.
2020-08-11 20:29:14 +02:00
Andreas Kling
2a765ad062 rm: Implement a basic -f mode 2020-08-11 20:29:14 +02:00
Andreas Kling
5bca49162c LibELF: Remove unused cruft in ELF::Loader 2020-08-11 20:29:14 +02:00
Nico Weber
8d3d0054ed Crypto: Make AES call malloc much less often
ByteBuffer::slice_view() allocates a new ByteBuffer object,
which as a RefPtr and everything.

Nowadays it should probably return a Bytes / Span<u8>, but AES was only
using slice_view() to extract the pointer again.  So just add ady a
range check at the top, and do pointer arithmetic to do the same thing
faster.

Reduces time to run `disasm /bin/id` by a bit under 40%,
from ~8.3s to ~5s (min-of-3 runs).
2020-08-11 16:25:36 +02:00
Linus Groh
faab8a82cb TextEditor: Show pageview URLs in statusbar on hover 2020-08-11 15:45:02 +02:00
Linus Groh
1353edd090 TextEditor: Open links from Web::PageView using Desktop::Launcher
So far, clicking on a link from the Markdown/HTML preview Web::PageView did
nothing - now we pass that link to Desktop::Launcher, which will then
open it in Browser, FileManager, another TextEditor instance etc.
2020-08-11 15:23:10 +02:00
Tom
49d5232f33 Kernel: Always return from Thread::wait_on
We need to always return from Thread::wait_on, even when a thread
is being killed. This is necessary so that the kernel call stack
can clean up and release references held by it. Then, right before
transitioning back to user mode, we check if the thread is
supposed to die, and at that point change the thread state to
Dying to prevent further scheduling of this thread.

This addresses some possible resource leaks similar to #3073
2020-08-11 14:54:36 +02:00
Andrew Mbugua
1f7190d3bd
Meta: Fix typo in NotesOnWSL.md (#3086) 2020-08-11 14:27:00 +02:00
Andreas Kling
8d73355c38 LibELF: Set ELF::Loader::m_symbol_count in constructor
Setting it in load() excludes users of ELF::Loader that don't actually
call load() but only use the Loader for symbolication purposes.

Perhaps the factoring here is not ideal.
2020-08-11 12:23:43 +02:00
Andreas Kling
c3b6df60b7 Help: Spruce up the UI with some tasteful layout margins 2020-08-10 21:20:28 +02:00
Andreas Kling
ae0ff13f66 LibGfx: Correct copyright years for {Classic,}WindowTheme.{cpp,h} 2020-08-10 21:20:28 +02:00
Andreas Kling
015c8d0eb6 Userland: Add a simple dirname(1) utility 2020-08-10 21:20:28 +02:00
Tom
8ffa4131ce WindowServer: Limit maximizing windows to top window in modal stack
When maximizing a window that is blocked by a modal window, only
maximize the top window in the stack. However, if the stack is
minimized, restore all of them in addition.

Fixes #3074
2020-08-10 21:02:11 +02:00
Nico Weber
37d5e3e0df Shell: Fix fd leak with pipes
Fixes the problem reported in #3073. While trying to write a test
for this, I thought I'd use

    Shell -c 'for i in $(seq 100) { echo $i }' | head -n 1

but that makes the cpu spin at 100% and doesn't terminate even
with this fix here. But at least piping disasm into head now works.
2020-08-10 20:57:38 +02:00
AnotherTest
69fc91d974 Shell: Cancel a running for loop upon receiving any non-SIGINT signal
And keep the old behaviour of needing two interruptions on SIGINT.
2020-08-10 20:50:06 +02:00
Andreas Kling
d777583e28 FileManager: Make the desktop process show as "FileManager (Desktop)" 2020-08-10 20:29:08 +02:00
Tom
fcaa45f97b Kernel: Include the 128 byte slab allocator in for_each_allocator 2020-08-10 20:05:18 +02:00
Tom
08ff25f4ef Kernel: Invoke heap constructors separately early on
By having a separate list of constructors for the kernel heap
code, we can properly use constructors without re-running them
after the heap was already initialized. This solves some problems
where values were wiped out because they were overwritten by
running their constructors later in the initialization process.
2020-08-10 20:05:18 +02:00
Muhammad Zahalqa
de5e542930 LibCore: remove redundant UDPSocket constructor
The comment claims it is for use from UDPServer::accept
Which is not a real function.
2020-08-10 20:03:18 +02:00