mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-17 10:26:15 +00:00
The fasttrap ioctl used to create probes takes a variable-sized argument.
It was not being correctly copied into the kernel on FreeBSD, and as a result, probes with multiple probe sites were not being created properly. To fix this, change the ioctl definition so that the fasttrap ioctl handler is responsible for copying in userland data. Submitted by: Prashanth Kumar <pra_udupi@yahoo.co.in> MFC after: 1 month
This commit is contained in:
parent
be1938b303
commit
dd580326fe
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=258291
@ -2064,20 +2064,16 @@ fasttrap_ioctl(struct cdev *dev, u_long cmd, caddr_t arg, int fflag,
|
||||
return (EAGAIN);
|
||||
|
||||
if (cmd == FASTTRAPIOC_MAKEPROBE) {
|
||||
fasttrap_probe_spec_t *uprobe = (void *)arg;
|
||||
fasttrap_probe_spec_t *uprobe = *(fasttrap_probe_spec_t **)arg;
|
||||
fasttrap_probe_spec_t *probe;
|
||||
uint64_t noffs;
|
||||
size_t size;
|
||||
int ret;
|
||||
char *c;
|
||||
|
||||
#if defined(sun)
|
||||
if (copyin(&uprobe->ftps_noffs, &noffs,
|
||||
sizeof (uprobe->ftps_noffs)))
|
||||
return (EFAULT);
|
||||
#else
|
||||
noffs = uprobe->ftps_noffs;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Probes must have at least one tracepoint.
|
||||
@ -2093,19 +2089,10 @@ fasttrap_ioctl(struct cdev *dev, u_long cmd, caddr_t arg, int fflag,
|
||||
|
||||
probe = kmem_alloc(size, KM_SLEEP);
|
||||
|
||||
#if defined(sun)
|
||||
if (copyin(uprobe, probe, size) != 0) {
|
||||
kmem_free(probe, size);
|
||||
return (EFAULT);
|
||||
}
|
||||
#else
|
||||
memcpy(probe, uprobe, sizeof(*probe));
|
||||
if (noffs > 1 && copyin(uprobe + 1, probe + 1, size) != 0) {
|
||||
kmem_free(probe, size);
|
||||
return (EFAULT);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
* Verify that the function and module strings contain no
|
||||
|
@ -42,8 +42,8 @@ extern "C" {
|
||||
#define FASTTRAPIOC_MAKEPROBE (FASTTRAPIOC | 1)
|
||||
#define FASTTRAPIOC_GETINSTR (FASTTRAPIOC | 2)
|
||||
#else
|
||||
#define FASTTRAPIOC_MAKEPROBE _IOW('f', 1, fasttrap_probe_spec_t)
|
||||
#define FASTTRAPIOC_GETINSTR _IOWR('f', 2, uint8_t)
|
||||
#define FASTTRAPIOC_MAKEPROBE _IO('f', 3)
|
||||
#endif
|
||||
|
||||
typedef enum fasttrap_probe_type {
|
||||
|
Loading…
Reference in New Issue
Block a user