logo

oasis

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

0003-Avoid-pointer-arithmetic-on-void.patch (4863B)


  1. From c154f9dfaaccabc52af12ccabc86e9d0c6c18ada Mon Sep 17 00:00:00 2001
  2. From: Michael Forney <mforney@mforney.org>
  3. Date: Sun, 7 Jul 2019 21:25:13 -0700
  4. Subject: [PATCH] Avoid pointer arithmetic on `void *`
  5. ---
  6. src/netlink_smc_diag.c | 4 ++--
  7. src/print_timespec.h | 6 ++++--
  8. src/sockaddr.c | 4 ++--
  9. src/tee.c | 2 +-
  10. src/ucopy.c | 12 ++++++------
  11. 5 files changed, 15 insertions(+), 13 deletions(-)
  12. diff --git a/src/netlink_smc_diag.c b/src/netlink_smc_diag.c
  13. index 74e78b966..c3a28a839 100644
  14. --- a/src/netlink_smc_diag.c
  15. +++ b/src/netlink_smc_diag.c
  16. @@ -42,7 +42,7 @@ DECL_NETLINK_DIAG_DECODER(decode_smc_diag_req)
  17. if (len >= sizeof(req)) {
  18. if (!umoven_or_printaddr(tcp, addr + offset,
  19. sizeof(req) - offset,
  20. - (void *) &req + offset)) {
  21. + (char *) &req + offset)) {
  22. PRINT_FIELD_FLAGS(req, diag_ext,
  23. smc_diag_extended_flags,
  24. "1<<SMC_DIAG_\?\?\?-1");
  25. @@ -261,7 +261,7 @@ DECL_NETLINK_DIAG_DECODER(decode_smc_diag_msg)
  26. if (len >= sizeof(msg)) {
  27. if (!umoven_or_printaddr(tcp, addr + offset,
  28. sizeof(msg) - offset,
  29. - (void *) &msg + offset)) {
  30. + (char *) &msg + offset)) {
  31. PRINT_FIELD_XVAL(msg, diag_state,
  32. smc_states, "SMC_???");
  33. tprint_struct_next();
  34. diff --git a/src/print_timespec.h b/src/print_timespec.h
  35. index dc5f9d10c..87f7ff973 100644
  36. --- a/src/print_timespec.h
  37. +++ b/src/print_timespec.h
  38. @@ -66,6 +66,8 @@ bool
  39. PRINT_TIMESPEC_ARRAY_DATA_SIZE(const void *arg, const unsigned int nmemb,
  40. const size_t size)
  41. {
  42. + const char *ts = arg;
  43. +
  44. if (nmemb > size / sizeof(TIMESPEC_T)) {
  45. tprint_unavailable();
  46. return false;
  47. @@ -73,10 +75,10 @@ PRINT_TIMESPEC_ARRAY_DATA_SIZE(const void *arg, const unsigned int nmemb,
  48. tprint_array_begin();
  49. - for (unsigned int i = 0; i < nmemb; i++, arg += sizeof(TIMESPEC_T)) {
  50. + for (unsigned int i = 0; i < nmemb; i++, ts += sizeof(TIMESPEC_T)) {
  51. if (i)
  52. tprint_array_next();
  53. - print_unaligned_timespec_t(arg);
  54. + print_unaligned_timespec_t(ts);
  55. }
  56. tprint_array_end();
  57. diff --git a/src/sockaddr.c b/src/sockaddr.c
  58. index ee1ce8828..c1f9b1740 100644
  59. --- a/src/sockaddr.c
  60. +++ b/src/sockaddr.c
  61. @@ -583,7 +583,7 @@ print_sockaddr_data_ll(struct tcb *tcp, const void *const buf,
  62. static void
  63. print_sockaddr_data_raw(const void *const buf, const int addrlen)
  64. {
  65. - const char *const data = buf + SIZEOF_SA_FAMILY;
  66. + const char *const data = (const char *)buf + SIZEOF_SA_FAMILY;
  67. const int datalen = addrlen - SIZEOF_SA_FAMILY;
  68. tprints_field_name("sa_data");
  69. @@ -780,7 +780,7 @@ print_sockaddr_data_rxrpc(struct tcb *tcp, const void *const buf,
  70. tprints_field_name("transport");
  71. tprint_struct_begin();
  72. - const void *const transport_buf = (void *) &sa->transport
  73. + const void *const transport_buf = (char *) &sa->transport
  74. + sizeof(sa->transport.family);
  75. const int transport_len = MIN(sa->transport_len,
  76. len - offsetof(struct sockaddr_rxrpc,
  77. diff --git a/src/tee.c b/src/tee.c
  78. index c62566800..1596a5095 100644
  79. --- a/src/tee.c
  80. +++ b/src/tee.c
  81. @@ -69,7 +69,7 @@ tee_fetch_buf_data(struct tcb *const tcp,
  82. tee_print_buf(buf);
  83. return RVAL_IOCTL_DECODED;
  84. }
  85. - uint32_t *num_params = (uint32_t *) (arg_struct + num_params_offs);
  86. + uint32_t *num_params = (uint32_t *) ((char *)arg_struct + num_params_offs);
  87. if (entering(tcp) &&
  88. (arg_size + TEE_IOCTL_PARAM_SIZE(*num_params) != buf->buf_len)) {
  89. /*
  90. diff --git a/src/ucopy.c b/src/ucopy.c
  91. index b4e746b0b..007b5373e 100644
  92. --- a/src/ucopy.c
  93. +++ b/src/ucopy.c
  94. @@ -186,7 +186,7 @@ vm_read_mem(const pid_t pid, void *laddr,
  95. break;
  96. len = next_len;
  97. - laddr += copy_len;
  98. + laddr = (char *)laddr + copy_len;
  99. page_start += page_size;
  100. taddr = page_start;
  101. }
  102. @@ -282,7 +282,7 @@ umoven_peekdata(const int pid, kernel_ulong_t addr, unsigned int len,
  103. memcpy(laddr, &u.data[residue], m);
  104. residue = 0;
  105. addr += sizeof(long);
  106. - laddr += m;
  107. + laddr = (char *)laddr + m;
  108. nread += m;
  109. len -= m;
  110. }
  111. @@ -378,10 +378,10 @@ umovestr_peekdata(const int pid, kernel_ulong_t addr, unsigned int len,
  112. memcpy(laddr, &u.data[residue], m);
  113. while (residue < sizeof(long))
  114. if (u.data[residue++] == '\0')
  115. - return (laddr - orig_addr) + residue;
  116. + return nread + residue;
  117. residue = 0;
  118. addr += sizeof(long);
  119. - laddr += m;
  120. + laddr = (char *)laddr + m;
  121. nread += m;
  122. len -= m;
  123. }
  124. @@ -502,7 +502,7 @@ upoken_pokedata(const int pid, kernel_ulong_t addr, unsigned int len,
  125. addr += sizeof(long);
  126. nwritten += npoke;
  127. - our_addr += npoke;
  128. + our_addr = (char *)our_addr + npoke;
  129. len -= npoke;
  130. }
  131. @@ -515,7 +515,7 @@ upoken_pokedata(const int pid, kernel_ulong_t addr, unsigned int len,
  132. addr += sizeof(long);
  133. nwritten += sizeof(long);
  134. - our_addr += sizeof(long);
  135. + our_addr = (char *)our_addr + sizeof(long);
  136. len -= sizeof(long);
  137. }
  138. --
  139. 2.44.0