diff options
author | dchagin <dchagin@FreeBSD.org> | 2016-01-09 18:32:52 +0000 |
---|---|---|
committer | dchagin <dchagin@FreeBSD.org> | 2016-01-09 18:32:52 +0000 |
commit | 07e5594c026805908fc316a7eb9f2798559b1776 (patch) | |
tree | 00db1fb832b4ba9a1535eded7fcd67bab7140966 /sys/amd64 | |
parent | f7ac54cb05948bd35f71bc359750f62cb622b4e9 (diff) | |
download | FreeBSD-src-07e5594c026805908fc316a7eb9f2798559b1776.zip FreeBSD-src-07e5594c026805908fc316a7eb9f2798559b1776.tar.gz |
MFC r289055 (by mjg@):
linux: fix handling of out-of-bounds syscall attempts
Due to an off by one the code would read an entry past the table, as
opposed to the last entry which contains the nosys handler.
This fixes my fault.
MFC r289058 (by cem@):
Fix missing semi-colon from r289055.
MFC r289768 (by jhb@):
Merge r289055 to amd64/linux32:
linux: fix handling of out-of-bounds syscall attempts
Due to an off by one the code would read an entry past the table, as
opposed to the last entry which contains the nosys handler.
Diffstat (limited to 'sys/amd64')
-rw-r--r-- | sys/amd64/linux/linux_sysvec.c | 2 | ||||
-rw-r--r-- | sys/amd64/linux32/linux32_sysvec.c | 2 |
2 files changed, 2 insertions, 2 deletions
diff --git a/sys/amd64/linux/linux_sysvec.c b/sys/amd64/linux/linux_sysvec.c index e9ab8b3..37c1b69 100644 --- a/sys/amd64/linux/linux_sysvec.c +++ b/sys/amd64/linux/linux_sysvec.c @@ -234,7 +234,7 @@ linux_fetch_syscall_args(struct thread *td, struct syscall_args *sa) if (sa->code >= p->p_sysent->sv_size) /* nosys */ - sa->callp = &p->p_sysent->sv_table[LINUX_SYS_MAXSYSCALL]; + sa->callp = &p->p_sysent->sv_table[p->p_sysent->sv_size - 1]; else sa->callp = &p->p_sysent->sv_table[sa->code]; sa->narg = sa->callp->sy_narg; diff --git a/sys/amd64/linux32/linux32_sysvec.c b/sys/amd64/linux32/linux32_sysvec.c index 4364438..250e16b 100644 --- a/sys/amd64/linux32/linux32_sysvec.c +++ b/sys/amd64/linux32/linux32_sysvec.c @@ -741,7 +741,7 @@ linux32_fetch_syscall_args(struct thread *td, struct syscall_args *sa) if (sa->code >= p->p_sysent->sv_size) /* nosys */ - sa->callp = &p->p_sysent->sv_table[LINUX_SYS_MAXSYSCALL]; + sa->callp = &p->p_sysent->sv_table[p->p_sysent->sv_size - 1]; else sa->callp = &p->p_sysent->sv_table[sa->code]; sa->narg = sa->callp->sy_narg; |