On Fri 22-07-11 09:06:59, Nikiforov Alex wrote:
> @@ -3704,6 +3705,7 @@ int cgroup_register_unchanged_process(pid_t pid, 
> int flags)
>       int ret = 1;
>       char buff[sizeof(CGRULE_SUCCESS_STORE_PID)];
>       struct sockaddr_un addr;
> +     struct iovec    iov[2] = {};
> 
>       sk = socket(PF_UNIX, SOCK_STREAM, 0);
>       if (sk < 0)
> @@ -3720,10 +3722,13 @@ int cgroup_register_unchanged_process(pid_t pid, 
> int flags)
>               ret = 0;
>               goto close;
>       }
> -     if (write(sk, &pid, sizeof(pid)) < 0)
> -             goto close;
> 
> -     if (write(sk, &flags, sizeof(flags)) < 0)
> +     iov[0].iov_base =  &pid;
> +     iov[0].iov_len =  sizeof(pid);
> +     iov[1].iov_base =  &flags;
> +     iov[1].iov_len =  sizeof(flags);
> +
> +     if (writev(sk, iov, 2) < 0)
>               goto close;

shouldn't you check for < iov[0].iov_len + iov[1].iov_len?

> 
>       if (read(sk, buff, sizeof(buff)) < 0)
> diff --git a/src/daemon/cgrulesengd.c b/src/daemon/cgrulesengd.c
> index 2f42a57..14887bb 100644
> --- a/src/daemon/cgrulesengd.c
> +++ b/src/daemon/cgrulesengd.c
> @@ -40,6 +40,7 @@
>   #include <stdio.h>
>   #include <stdlib.h>
>   #include <sys/socket.h>
> +#include <sys/uio.h>
>   #include <sys/syslog.h>
>   #include <string.h>
>   #include <linux/netlink.h>
> @@ -552,6 +553,7 @@ static void cgre_receive_unix_domain_msg(int sk_unix)
>       socklen_t caddr_len;
>       struct stat buff_stat;
>       char path[FILENAME_MAX];
> +     struct iovec    iov[2] = {};
> 
>       caddr_len = sizeof(caddr);
>       fd_client = accept(sk_unix, (struct sockaddr *)&caddr, &caddr_len);
> @@ -559,16 +561,19 @@ static void cgre_receive_unix_domain_msg(int sk_unix)
>               cgroup_dbg("accept error: %s\n", strerror(errno));
>               return;
>       }
> -     if (read(fd_client, &pid, sizeof(pid)) < 0) {
> -             cgroup_dbg("read error: %s\n", strerror(errno));
> -             goto close;
> -     }
> -     sprintf(path, "/proc/%d", pid);
> -     if (stat(path, &buff_stat)) {
> -             cgroup_dbg("There is not such process (PID: %d)", pid);
> -             goto close;
> -     }
> -     if (read(fd_client, &flags, sizeof(flags)) < 0) {
> +
> +     iov[0].iov_base =  &pid;
> +     iov[0].iov_len =  sizeof(pid);
> +     iov[1].iov_base =  &flags;
> +     iov[1].iov_len =  sizeof(flags);
> +
> +     if (readv(fd_client, iov, 2) < 0) {

Same here.
-- 
Michal Hocko
SUSE Labs
SUSE LINUX s.r.o.
Lihovarska 1060/12
190 00 Praha 9    
Czech Republic

------------------------------------------------------------------------------
10 Tips for Better Web Security
Learn 10 ways to better secure your business today. Topics covered include:
Web security, SSL, hacker attacks & Denial of Service (DoS), private keys,
security Microsoft Exchange, secure Instant Messaging, and much more.
http://www.accelacomm.com/jaw/sfnl/114/51426210/
_______________________________________________
Libcg-devel mailing list
Libcg-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libcg-devel

Reply via email to