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
[email protected]
https://lists.sourceforge.net/lists/listinfo/libcg-devel