public inbox for lvm2-cvs@sourceware.org help / color / mirror / Atom feed
From: jbrassow@sourceware.org To: lvm-devel@redhat.com, lvm2-cvs@sourceware.org Subject: LVM2/daemons/cmirrord functions.c Date: Mon, 21 Jun 2010 16:07:00 -0000 [thread overview] Message-ID: <20100621160707.5431.qmail@sourceware.org> (raw) CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: jbrassow@sourceware.org 2010-06-21 16:07:06 Modified files: daemons/cmirrord: functions.c Log message: Add error checking for calls to sprintf - it can fail for more reasons than just 'out-of-space'. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/daemons/cmirrord/functions.c.diff?cvsroot=lvm2&r1=1.19&r2=1.20 --- LVM2/daemons/cmirrord/functions.c 2010/06/18 20:58:04 1.19 +++ LVM2/daemons/cmirrord/functions.c 2010/06/21 16:07:06 1.20 @@ -1371,15 +1371,21 @@ static int core_status_info(struct log_c *lc __attribute((unused)), struct dm_ulog_request *rq) { + int r; char *data = (char *)rq->data; - rq->data_size = sprintf(data, "1 clustered-core"); + r = sprintf(data, "1 clustered-core"); + if (r < 0) + return r; + + rq->data_size = r; return 0; } static int disk_status_info(struct log_c *lc, struct dm_ulog_request *rq) { + int r; char *data = (char *)rq->data; struct stat statbuf; @@ -1388,9 +1394,13 @@ return -errno; } - rq->data_size = sprintf(data, "3 clustered-disk %d:%d %c", - major(statbuf.st_rdev), minor(statbuf.st_rdev), - (lc->log_dev_failed) ? 'D' : 'A'); + r = sprintf(data, "3 clustered-disk %d:%d %c", + major(statbuf.st_rdev), minor(statbuf.st_rdev), + (lc->log_dev_failed) ? 'D' : 'A'); + if (r < 0) + return r; + + rq->data_size = r; return 0; } @@ -1421,18 +1431,24 @@ static int core_status_table(struct log_c *lc, struct dm_ulog_request *rq) { + int r; char *data = (char *)rq->data; - rq->data_size = sprintf(data, "clustered-core %u %s%s ", - lc->region_size, - (lc->sync == DEFAULTSYNC) ? "" : - (lc->sync == NOSYNC) ? "nosync " : "sync ", - (lc->block_on_error) ? "block_on_error" : ""); + r = sprintf(data, "clustered-core %u %s%s ", + lc->region_size, + (lc->sync == DEFAULTSYNC) ? "" : + (lc->sync == NOSYNC) ? "nosync " : "sync ", + (lc->block_on_error) ? "block_on_error" : ""); + if (r < 0) + return r; + + rq->data_size = r; return 0; } static int disk_status_table(struct log_c *lc, struct dm_ulog_request *rq) { + int r; char *data = (char *)rq->data; struct stat statbuf; @@ -1441,12 +1457,16 @@ return -errno; } - rq->data_size = sprintf(data, "clustered-disk %d:%d %u %s%s ", - major(statbuf.st_rdev), minor(statbuf.st_rdev), - lc->region_size, - (lc->sync == DEFAULTSYNC) ? "" : - (lc->sync == NOSYNC) ? "nosync " : "sync ", - (lc->block_on_error) ? "block_on_error" : ""); + r = sprintf(data, "clustered-disk %d:%d %u %s%s ", + major(statbuf.st_rdev), minor(statbuf.st_rdev), + lc->region_size, + (lc->sync == DEFAULTSYNC) ? "" : + (lc->sync == NOSYNC) ? "nosync " : "sync ", + (lc->block_on_error) ? "block_on_error" : ""); + if (r < 0) + return r; + + rq->data_size = r; return 0; } @@ -1555,6 +1575,11 @@ * from this function. However, an inability to successfully * perform the request will fill in the 'rq->error' field. * + * 'rq' (or more correctly, rq->u_rq.data) should be of sufficient + * size to hold any returning data. Currently, local.c uses 2kiB + * to hold 'rq' - leaving ~1.5kiB for return data... more than + * enough for all the implemented functions here. + * * Returns: 0 on success, -EXXX on error */ int do_request(struct clog_request *rq, int server)
next reply other threads:[~2010-06-21 16:07 UTC|newest] Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top 2010-06-21 16:07 jbrassow [this message] -- strict thread matches above, loose matches on Subject: below -- 2010-12-20 13:58 zkabelac 2010-10-26 10:14 zkabelac 2010-01-22 0:43 agk 2010-01-19 18:21 agk 2010-01-19 17:24 agk 2010-01-15 16:03 jbrassow
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20100621160707.5431.qmail@sourceware.org \ --to=jbrassow@sourceware.org \ --cc=lvm-devel@redhat.com \ --cc=lvm2-cvs@sourceware.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).