basic: fix overflow detection in sigbus_pop

The current check checks for n_sigbus_queue
being greater than or equal to SIGBUS_QUEUE_MAX,
when it should be just greater than as
n_sigbus_queue being SIGBUS_QUEUE_MAX indicates
that the queue is full, but not overflowed.
This commit is contained in:
Rose
2024-01-04 05:26:01 +09:00
committed by Yu Watanabe
parent f3f6c65618
commit b4a9d19e4e
+3 -3
View File
@@ -40,14 +40,14 @@ static void sigbus_push(void *addr) {
}
/* If we can't, make sure the queue size is out of bounds, to
* mark it as overflow */
* mark it as overflowed */
for (;;) {
sig_atomic_t c;
__atomic_thread_fence(__ATOMIC_SEQ_CST);
c = n_sigbus_queue;
if (c > SIGBUS_QUEUE_MAX) /* already overflow */
if (c > SIGBUS_QUEUE_MAX) /* already overflowed */
return;
/* OK if we clobber c here, since we either immediately return
@@ -70,7 +70,7 @@ int sigbus_pop(void **ret) {
if (_likely_(c == 0))
return 0;
if (_unlikely_(c >= SIGBUS_QUEUE_MAX))
if (_unlikely_(c > SIGBUS_QUEUE_MAX))
return -EOVERFLOW;
for (u = 0; u < SIGBUS_QUEUE_MAX; u++) {