git://git.onelab.eu
/
procprotect.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Possible race condition and consequent crash
[procprotect.git]
/
procprotect.c
diff --git
a/procprotect.c
b/procprotect.c
index
e22355a
..
950be09
100644
(file)
--- a/
procprotect.c
+++ b/
procprotect.c
@@
-157,8
+157,12
@@
static int lookup_slow_entry(struct kretprobe_instance *ri, struct pt_regs *regs
static int lookup_slow_ret(struct kretprobe_instance *ri, struct pt_regs *regs)
{
static int lookup_slow_ret(struct kretprobe_instance *ri, struct pt_regs *regs)
{
- struct procprotect_ctx *ctx = (struct procprotect_ctx *) ri->data;
- int ret = regs->ax;
+ struct procprotect_ctx *ctx;
+ int ret;
+
+ if (!ri) {/* Race condition?*/ return 0;}
+ ctx = (struct procprotect_ctx *) ri->data;
+ ret = regs->ax;
if (ret==0) {
/* The kernel is going to honor the request. Here's where we step in */
if (ret==0) {
/* The kernel is going to honor the request. Here's where we step in */
@@
-289,11
+293,12
@@
int procfile_write(struct file *file, const char *buffer, unsigned long count, v
static int __init procprotect_init(void)
{
static int __init procprotect_init(void)
{
- printk("Procprotect: starting procprotect version %s with ACLs at path %s.\n",
- VERSION_STR, aclpath);
int ret;
int i;
int ret;
int i;
+ printk("Procprotect: starting procprotect version %s with ACLs at path %s.\n",
+ VERSION_STR, aclpath);
+
for(i=0;i<HASH_SIZE;i++) {
INIT_HLIST_HEAD(&procprotect_hash[i]);
}
for(i=0;i<HASH_SIZE;i++) {
INIT_HLIST_HEAD(&procprotect_hash[i]);
}