At Mon, 28 Jul 2014 11:25:37 +0800,
Ruoyu wrote:
> 
> If epoch file length is shorter than size of time due to file broken,
> epoch_stat.st_size - sizeof(*timestamp) is negative. However,
> the third parameter of function xread will get it as type size_t,
> then xread will think there are many data to be read. Therefore,
> a file length checking to prevent this situation is needed.
> 
> v2 does nothing changed logically but uses a variable to store
> the value of the express 'epoch_stat.st_size - sizeof(*timestamp)'
> 
> Signed-off-by: Ruoyu <lian...@ucweb.com>
> ---
>  sheep/store.c | 7 ++++---
>  1 file changed, 4 insertions(+), 3 deletions(-)

Applied, thanks.
Hitoshi

> 
> diff --git a/sheep/store.c b/sheep/store.c
> index eee88c7..eb42f2c 100644
> --- a/sheep/store.c
> +++ b/sheep/store.c
> @@ -44,7 +44,7 @@ int update_epoch_log(uint32_t epoch, struct sd_node *nodes, 
> size_t nr_nodes)
>  static int do_epoch_log_read(uint32_t epoch, struct sd_node *nodes, int len,
>                            time_t *timestamp)
>  {
> -     int fd, ret, nr_nodes;
> +     int fd, ret, nr_nodes, buf_len;
>       char path[PATH_MAX];
>       struct stat epoch_stat;
>  
> @@ -62,12 +62,13 @@ static int do_epoch_log_read(uint32_t epoch, struct 
> sd_node *nodes, int len,
>               goto err;
>       }
>  
> -     if (len < epoch_stat.st_size - sizeof(*timestamp)) {
> +     buf_len = epoch_stat.st_size - sizeof(*timestamp);
> +     if (buf_len < 0 || len < buf_len) {
>               sd_err("invalid epoch %"PRIu32" log", epoch);
>               goto err;
>       }
>  
> -     ret = xread(fd, nodes, epoch_stat.st_size - sizeof(*timestamp));
> +     ret = xread(fd, nodes, buf_len);
>       if (ret < 0) {
>               sd_err("failed to read epoch %"PRIu32" log, %m", epoch);
>               goto err;
> -- 
> 1.8.3.2
> 
> 
> -- 
> sheepdog mailing list
> sheepdog@lists.wpkg.org
> http://lists.wpkg.org/mailman/listinfo/sheepdog
-- 
sheepdog mailing list
sheepdog@lists.wpkg.org
http://lists.wpkg.org/mailman/listinfo/sheepdog

Reply via email to