How can I copy the data of buf in kernel space to the uio structhre in user space.

2010-02-01 Thread Jun Furukawa

Hi,
For my research, I am now hooking the function vn_write().

This is the part of the source code.

#include sys/param.h/* module   */
#include sys/module.h   /* module   */
#include sys/kernel.h   /* module   */
#include sys/types.h/* size_t, copystr  */
#include sys/systm.h/* copystr */
#include sys/proc.h /* struct thread*/
#include sys/file.h /* vnops*/
#include fs/msdosfs/msdosfs_vnops.c /* msdosfs_vnodeops */

int
fo_write_hook(struct file *fp,
   struct uio *uio,
   struct ucred *active_cred,
   int flags,
   struct thread *td);

typedef int (*fow_t)(struct file*,
   struct uio*,
   struct ucred*,
   int flags,
   struct thread*);

fow_t old_fo_write;
static char mybuf[256+1];
static size_t len;

/* vn_write hook */
int
vn_write_hook(struct file *fp,
   struct uio *uio,
   struct ucred *active_cred,
   int flags,
   struct thread *td)
{
 ...
   int error;

   memset(mybuf, '\0', 257);

   error = copyinstr(uio-uio_iov-iov_base, mybuf, 256, len);

   if (error != 0) {
   uprintf(Cannot write data to kernel space\n);
   }

   /* encrypt the data by ceaser algorithm */
   for (int i = 0; i  len ; i++)
   mybuf[i] += 3;

   error = copystr(mybuf, uio-uio_iov-iov_base, 257, len);

   if (error != 0) {
   uprintf(Cannot write data to user space\n);
   }

 ...
   return (old_vn_write(fp, uio, active_cred, flags, td));
}

This software is implemented as a kernel module.

After I installed this software and execute cp command, vn_write_hook 
function is executed.


However, when copystr(mybuf, uio-uio_iov-iov_base, 257, len) is 
executed,


kernel goes to panic.

I referenced /usr/share/examples/kld/cdev/module/cdev.c for writing the 
part of program


that copies buffer in kernel space to a buf in user space program. 
However, as we have seen,


this doesn't work appropriately.

How can I solve this problem?

Please give me your help.

--Jun Furukawa




___
freebsd-questions@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to freebsd-questions-unsubscr...@freebsd.org


Re: How can I copy the data of buf in kernel space to the uio structhre in user space.

2010-02-01 Thread Steve Bertrand
Jun Furukawa wrote:
 Hi,
 For my research, I am now hooking the function vn_write().

[ big snip ]

 How can I solve this problem?

Subscribe to freebsd-hackers@, and post your message there. Hopefully
they can help.

Steve
___
freebsd-questions@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to freebsd-questions-unsubscr...@freebsd.org