Messages in this thread Patch in this message | | | Date | Wed, 26 Jan 2000 13:15:51 -0500 (EST) | From | Ben LaHaise <> | Subject | Re: buggy GFP_KERNEL allocators |
| |
Hello Rik & all,
Here's a patch for two of the places that touch userspace after modifying current->state. Alan, could you include these in the next pre patch?
-ben
diff -ur clean/2.2.15pre4/kernel/exit.c linux/kernel/exit.c --- clean/2.2.15pre4/kernel/exit.c Wed Jan 26 11:30:15 2000 +++ linux/kernel/exit.c Wed Jan 26 13:00:26 2000 @@ -473,6 +473,7 @@ if (!(options & WUNTRACED) && !(p->flags & PF_PTRACED)) continue; read_unlock(&tasklist_lock); + current->state = TASK_RUNNING; /* We *must* do this before touching userspace! */ retval = ru ? getrusage(p, RUSAGE_BOTH, ru) : 0; if (!retval && stat_addr) retval = put_user((p->exit_code << 8) | 0x7f, stat_addr); @@ -485,6 +486,7 @@ current->times.tms_cutime += p->times.tms_utime + p->times.tms_cutime; current->times.tms_cstime += p->times.tms_stime + p->times.tms_cstime; read_unlock(&tasklist_lock); + current->state = TASK_RUNNING; /* We *must* do this before touching userspace! */ retval = ru ? getrusage(p, RUSAGE_BOTH, ru) : 0; if (!retval && stat_addr) retval = put_user(p->exit_code, stat_addr); diff -ur clean/2.2.15pre4/net/ipv4/tcp.c linux/net/ipv4/tcp.c --- clean/2.2.15pre4/net/ipv4/tcp.c Wed Jan 26 11:30:40 2000 +++ linux/net/ipv4/tcp.c Wed Jan 26 12:57:00 2000 @@ -1283,6 +1283,9 @@ continue; found_ok_skb: + /* Below we'll be accessing user memory, which might sleep, so... */ + current->state = TASK_RUNNING; + /* Lock the buffer. We can be fairly relaxed as * an interrupt will never steal a buffer we are * using unless I've missed something serious in @@ -1364,15 +1367,15 @@ break; } + remove_wait_queue(sk->sleep, &wait); + current->state = TASK_RUNNING; + if(copied >= 0 && msg->msg_name) { tp->af_specific->addr2sockaddr(sk, (struct sockaddr *) msg->msg_name); if(addr_len) *addr_len = tp->af_specific->sockaddr_len; } - - remove_wait_queue(sk->sleep, &wait); - current->state = TASK_RUNNING; /* Clean up data we have read: This will do ACK frames. */ cleanup_rbuf(sk, copied);
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/
| |