Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 24 Jun 2006 13:09:51 +0200
From:      Divacky Roman <xdivac02@stud.fit.vutbr.cz>
To:        Dmitry Ganenko <dima@apk-inform.com>
Cc:        freebsd-emulation@freebsd.org
Subject:   Re: Installation of Oracle10g Express Edition on FreeBSD 5.4-RELEASE
Message-ID:  <20060624110951.GA21539@stud.fit.vutbr.cz>
In-Reply-To: <885310187.20060623143520@apk-inform.com>
References:  <885310187.20060623143520@apk-inform.com>

next in thread | previous in thread | raw e-mail | index | archive | help
> --- compat/linux/linux_misc.c.orig      Fri Apr  1 01:17:42 2005
> +++ compat/linux/linux_misc.c   Wed Jun 21 11:14:05 2006
> @@ -711,8 +711,9 @@ linux_times(struct thread *td, struct li
>         tms.tms_cutime = CONVTCK(td->td_proc->p_stats->p_cru.ru_utime);
>         tms.tms_cstime = CONVTCK(td->td_proc->p_stats->p_cru.ru_stime);
>  
> -       if ((error = copyout(&tms, args->buf, sizeof(tms))))
> -               return error;
> +       if (args->buf != NULL)
> +               if ((error = copyout(&tms, args->buf, sizeof(tms))))
> +                       return error;
>  
>         microuptime(&tv);
>         td->td_retval[0] = (int)CONVTCK(tv);
 
 
this looks ok... a different version was commited
 
> --- compat/linprocfs/linprocfs.c.orig   Fri Apr  1 01:27:16 2005
> +++ compat/linprocfs/linprocfs.c        Wed Jun 21 11:14:10 2006
> @@ -515,7 +515,7 @@ linprocfs_doprocstat(PFS_FILL_ARGS)
>         sbuf_printf(sb, "%d", p->p_pid);
>  #define PS_ADD(name, fmt, arg) sbuf_printf(sb, " " fmt, arg)
>         PS_ADD("comm",          "(%s)", p->p_comm);
> -       PS_ADD("statr",         "%c",   '0'); /* XXX */
> +       PS_ADD("statr",         "%c",   'S'); /* XXX */
>         PS_ADD("ppid",          "%d",   p->p_pptr ? p->p_pptr->p_pid : 0);
>         PS_ADD("pgrp",          "%d",   p->p_pgid);
>         PS_ADD("session",       "%d",   p->p_session->s_sid);
> @@ -535,7 +535,7 @@ linprocfs_doprocstat(PFS_FILL_ARGS)
>         PS_ADD("priority",      "%d",   0); /* XXX */
>         PS_ADD("timeout",       "%u",   0); /* XXX */
>         PS_ADD("itrealvalue",   "%u",   0); /* XXX */
> -       PS_ADD("starttime",     "%d",   0); /* XXX */
> +       PS_ADD("starttime",     "%d",   1); /* XXX */
>         PS_ADD("vsize",         "%ju",  (uintmax_t)kp.ki_size);
>         PS_ADD("rss",           "%ju",  P2K((uintmax_t)kp.ki_rssize));
>         PS_ADD("rlim",          "%u",   0); /* XXX */
 
this looks "almost ok" netchild@ is working on a patch which puts there
real values... thnx for the idea
 
> The third patch corrects a bug (or maybe a feature) in the pseudofs
> code (it is necessary for linprocfs). The case is, if you assemble
> linprocfs and try such a program, then the read function will read not
> 4 as it was asked but one point less, that is, as it is easily
> calculated, 3 bytes:
> 
> File test.c
> 
> #include <sys/types.h>
> #include <sys/uio.h> 
> #include <unistd.h> 
> #include <fcntl.h> 
> 
> main () { 
>  int fd, count;
>  char buf[10];
> 
>  fd = open("/compat/linux/proc/self/cmdline", O_RDONLY);
>  count = read(fd, buf, 4);
>  buf[4] = '\0';
>  printf("count = %d, buf = %s\n", count, buf);
> }
> 
> I am not sure whether the third correction is absolutely right;
> moreover, I am not sure as to its place in the code. This question is
> to real kernel hackers.

pls, can you explain how this manifest in the oracle? I agree that this is a
bug but I am not sure why noone noticed this. the fact is that most people use
"cat /proc/x/y" and cat reads 1024 bytes in this case so this doesnt manifest

> File patch3
> 
> --- fs/pseudofs/pseudofs_vnops.c.orig   Mon Sep  6 22:38:01 2004
> +++ fs/pseudofs/pseudofs_vnops.c        Wed Jun 21 11:14:14 2006
> @@ -530,7 +530,7 @@ pfs_read(struct vop_read_args *va)
>                         PRELE(proc);
>                 PFS_RETURN (EIO);
>         }
> -       sb = sbuf_new(sb, NULL, buflen, 0);
> +       sb = sbuf_new(sb, NULL, buflen+1, 0);
>         if (sb == NULL) {
>                 if (proc != NULL)
>                         PRELE(proc);

this is wrong...

what about this:

Index: pseudofs_vnops.c
===================================================================
RCS file: /home/ncvs/src/sys/fs/pseudofs/pseudofs_vnops.c,v
retrieving revision 1.59
diff -u -r1.59 pseudofs_vnops.c
--- pseudofs_vnops.c    22 Feb 2006 18:57:49 -0000      1.59
+++ pseudofs_vnops.c    24 Jun 2006 11:08:59 -0000
@@ -515,7 +515,7 @@
        if (uio->uio_offset < 0 || uio->uio_resid < 0 ||
            (offset = uio->uio_offset) != uio->uio_offset ||
            (resid = uio->uio_resid) != uio->uio_resid ||
-           (buflen = offset + resid) < offset || buflen > INT_MAX) {
+           (buflen = offset + resid + 1) < offset || buflen > INT_MAX) {
                if (proc != NULL)
                        PRELE(proc);
                PFS_RETURN (EINVAL);




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