logo

oasis

Own branch of Oasis Linux (upstream: <https://git.sr.ht/~mcf/oasis/>) git clone https://anongit.hacktivis.me/git/oasis.git

0024-rsync-Avoid-pointer-arithmetic-on-void.patch (5203B)


  1. From 2dc242877741913abaf8685c616406812d507e17 Mon Sep 17 00:00:00 2001
  2. From: Michael Forney <mforney@mforney.org>
  3. Date: Sat, 15 Jun 2019 20:06:13 -0700
  4. Subject: [PATCH] rsync: Avoid pointer arithmetic on `void *`
  5. ---
  6. usr.bin/rsync/blocks.c | 12 ++++++------
  7. usr.bin/rsync/downloader.c | 2 +-
  8. usr.bin/rsync/io.c | 12 ++++++------
  9. usr.bin/rsync/sender.c | 5 +++--
  10. 4 files changed, 16 insertions(+), 15 deletions(-)
  11. diff --git a/usr.bin/rsync/blocks.c b/usr.bin/rsync/blocks.c
  12. index d1d9b19c31e..9aca8c217a6 100644
  13. --- a/usr.bin/rsync/blocks.c
  14. +++ b/usr.bin/rsync/blocks.c
  15. @@ -163,7 +163,7 @@ blk_find(struct sess *sess, struct blkstat *st,
  16. if (!recomp) {
  17. fhash = (st->s1 & 0xFFFF) | (st->s2 << 16);
  18. } else {
  19. - fhash = hash_fast(st->map + st->offs, (size_t)osz);
  20. + fhash = hash_fast((char *)st->map + st->offs, (size_t)osz);
  21. st->s1 = fhash & 0xFFFF;
  22. st->s2 = fhash >> 16;
  23. }
  24. @@ -176,7 +176,7 @@ blk_find(struct sess *sess, struct blkstat *st,
  25. if (st->hint < blks->blksz &&
  26. fhash == blks->blks[st->hint].chksum_short &&
  27. (size_t)osz == blks->blks[st->hint].len) {
  28. - hash_slow(st->map + st->offs, (size_t)osz, md, sess);
  29. + hash_slow((char *)st->map + st->offs, (size_t)osz, md, sess);
  30. have_md = 1;
  31. if (memcmp(md, blks->blks[st->hint].chksum_long, blks->csum) == 0) {
  32. LOG4("%s: found matching hinted match: "
  33. @@ -209,7 +209,7 @@ blk_find(struct sess *sess, struct blkstat *st,
  34. (intmax_t)ent->blk->offs, ent->blk->len);
  35. if (have_md == 0) {
  36. - hash_slow(st->map + st->offs, (size_t)osz, md, sess);
  37. + hash_slow((char *)st->map + st->offs, (size_t)osz, md, sess);
  38. have_md = 1;
  39. }
  40. @@ -227,7 +227,7 @@ blk_find(struct sess *sess, struct blkstat *st,
  41. * block in the sequence.
  42. */
  43. - map = st->map + st->offs;
  44. + map = (char *)st->map + st->offs;
  45. st->s1 -= map[0];
  46. st->s2 -= osz * map[0];
  47. @@ -287,7 +287,7 @@ blk_match(struct sess *sess, const struct blkset *blks,
  48. blk->len, blk->idx);
  49. tok = -(blk->idx + 1);
  50. - hash_file_buf(&st->ctx, st->map + last, sz + blk->len);
  51. + hash_file_buf(&st->ctx, (char *)st->map + last, sz + blk->len);
  52. /*
  53. * Write the data we have, then follow it with
  54. @@ -312,7 +312,7 @@ blk_match(struct sess *sess, const struct blkset *blks,
  55. LOG4("%s: flushing %s %jd B", path,
  56. last == 0 ? "whole" : "remaining", (intmax_t)sz);
  57. - hash_file_buf(&st->ctx, st->map + last, sz);
  58. + hash_file_buf(&st->ctx, (char *)st->map + last, sz);
  59. st->total += sz;
  60. st->dirty += sz;
  61. diff --git a/usr.bin/rsync/downloader.c b/usr.bin/rsync/downloader.c
  62. index cab6eb23f9f..07ec334f6b4 100644
  63. --- a/usr.bin/rsync/downloader.c
  64. +++ b/usr.bin/rsync/downloader.c
  65. @@ -495,7 +495,7 @@ again:
  66. sz = tok == p->blk.blksz - 1 ? p->blk.rem : p->blk.len;
  67. assert(sz);
  68. assert(p->map != MAP_FAILED);
  69. - buf = p->map + (tok * p->blk.len);
  70. + buf = (char *)p->map + (tok * p->blk.len);
  71. /*
  72. * Now we read from our block.
  73. diff --git a/usr.bin/rsync/io.c b/usr.bin/rsync/io.c
  74. index dc224ae8aed..fcf9e92dbaa 100644
  75. --- a/usr.bin/rsync/io.c
  76. +++ b/usr.bin/rsync/io.c
  77. @@ -117,7 +117,7 @@ io_write_blocking(int fd, const void *buf, size_t sz)
  78. ERRX("io_write_nonblocking: short write");
  79. return 0;
  80. }
  81. - buf += wsz;
  82. + buf = (char *)buf + wsz;
  83. sz -= wsz;
  84. }
  85. @@ -156,7 +156,7 @@ io_write_buf(struct sess *sess, int fd, const void *buf, size_t sz)
  86. }
  87. sess->total_write += wsz;
  88. sz -= wsz;
  89. - buf += wsz;
  90. + buf = (char *)buf + wsz;
  91. }
  92. return 1;
  93. @@ -250,7 +250,7 @@ io_read_blocking(int fd, void *buf, size_t sz)
  94. ERRX("io_read_nonblocking: short read");
  95. return 0;
  96. }
  97. - buf += rsz;
  98. + buf = (char *)buf + rsz;
  99. sz -= rsz;
  100. }
  101. @@ -367,7 +367,7 @@ io_read_buf(struct sess *sess, int fd, void *buf, size_t sz)
  102. }
  103. sz -= rsz;
  104. sess->mplex_read_remain -= rsz;
  105. - buf += rsz;
  106. + buf = (char *)buf + rsz;
  107. sess->total_read += rsz;
  108. continue;
  109. }
  110. @@ -463,7 +463,7 @@ io_buffer_buf(void *buf, size_t *bufpos, size_t buflen, const void *val,
  111. {
  112. assert(*bufpos + valsz <= buflen);
  113. - memcpy(buf + *bufpos, val, valsz);
  114. + memcpy((char *)buf + *bufpos, val, valsz);
  115. *bufpos += valsz;
  116. }
  117. @@ -662,7 +662,7 @@ io_unbuffer_buf(const void *buf, size_t *bufpos, size_t bufsz, void *val,
  118. {
  119. assert(*bufpos + valsz <= bufsz);
  120. - memcpy(val, buf + *bufpos, valsz);
  121. + memcpy(val, (char *)buf + *bufpos, valsz);
  122. *bufpos += valsz;
  123. }
  124. diff --git a/usr.bin/rsync/sender.c b/usr.bin/rsync/sender.c
  125. index c54fbc2dae0..6469e7f27e5 100644
  126. --- a/usr.bin/rsync/sender.c
  127. +++ b/usr.bin/rsync/sender.c
  128. @@ -128,7 +128,7 @@ send_up_fsm(struct sess *sess, size_t *phase,
  129. return 0;
  130. }
  131. io_lowbuffer_buf(sess, *wb, &pos, *wbsz,
  132. - up->stat.map + up->stat.curpos, sz);
  133. + (char *)up->stat.map + up->stat.curpos, sz);
  134. up->stat.curpos += sz;
  135. if (up->stat.curpos == up->stat.curlen)
  136. @@ -561,7 +561,8 @@ rsync_sender(struct sess *sess, int fdin,
  137. if ((pfd[1].revents & POLLOUT) && wbufsz > 0) {
  138. assert(pfd[2].fd == -1);
  139. assert(wbufsz - wbufpos);
  140. - ssz = write(fdout, wbuf + wbufpos, wbufsz - wbufpos);
  141. + ssz = write(fdout,
  142. + (char *)wbuf + wbufpos, wbufsz - wbufpos);
  143. if (ssz == -1) {
  144. ERR("write");
  145. goto out;
  146. --
  147. 2.49.0