Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 5 Jul 2002 05:18:37 +0200
From:      Pawel Jakub Dawidek <nick@garage.freebsd.pl>
To:        freebsd-hackers@freebsd.org
Subject:   Problem with malloc().
Message-ID:  <20020705031837.GF347@garage.freebsd.pl>

next in thread | raw e-mail | index | archive | help
Hello there...

For example: we are in kernelspace and I want to change name of executed
files befor execution.

Example kernel module:
sysent[SYS_execve].sy_call = (sy_call_t *)n_execve;

#define FOOBAR	"foobar"

int
n_execve(struct proc *p, struct execve_args *uap)
{
	char	*myname;

	if (strcmp(uap->fname, "foo") == 0) {
		myname = (char *)malloc(strlen(FOOBAR) + 1, M_TEMP, M_WAITOK);
		strcpy(myname, FOOBAR);
		/* and now: */
		uap->fname = myname;
	}

	return execve(p, uap);
}

This of course will return EFAULT. How to allocate memory that will be used
in userspace when I'm in kernelspace? Yes, "foobar" is longer than "foo":)

-- 
Pawel Jakub Dawidek
UNIX Systems Administrator
http://garage.freebsd.pl
Am I Evil? Yes, I Am.

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020705031837.GF347>