Projects
openEuler:22.03:LTS:LoongArch
bind
_service:tar_scm_kernel_repo:backport-Accept-in...
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File _service:tar_scm_kernel_repo:backport-Accept-in-NULL-with-inlen-0-in-isc_-half-siphash24.patch of Package bind
From f1c08fe93ba35343534d893f3efcfa6f5d97fdf0 Mon Sep 17 00:00:00 2001 From: Mark Andrews <marka@isc.org> Date: Tue, 10 Jan 2023 13:51:49 +1100 Subject: [PATCH] Accept 'in=NULL' with 'inlen=0' in isc_{half}siphash24 Arthimetic on NULL pointers is undefined. Avoid arithmetic operations when 'in' is NULL and require 'in' to be non-NULL if 'inlen' is not zero. Conflict: NA Reference: https://gitlab.isc.org/isc-projects/bind9/-/commit/f1c08fe93ba35343534d893f3efcfa6f5d97fdf0 (cherry picked from commit 349c23dbb7a4f3ffe29f3c9deff418aab6266fd0) --- lib/isc/siphash.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/isc/siphash.c b/lib/isc/siphash.c index 1a863ff8e1..a6e60cf02f 100644 --- a/lib/isc/siphash.c +++ b/lib/isc/siphash.c @@ -91,6 +91,7 @@ isc_siphash24(const uint8_t *k, const uint8_t *in, const size_t inlen, uint8_t *out) { REQUIRE(k != NULL); REQUIRE(out != NULL); + REQUIRE(inlen == 0 || in != NULL); uint64_t k0 = U8TO64_LE(k); uint64_t k1 = U8TO64_LE(k + 8); @@ -102,7 +103,9 @@ isc_siphash24(const uint8_t *k, const uint8_t *in, const size_t inlen, uint64_t b = ((uint64_t)inlen) << 56; - const uint8_t *end = in + inlen - (inlen % sizeof(uint64_t)); + const uint8_t *end = (in == NULL) + ? NULL + : in + inlen - (inlen % sizeof(uint64_t)); const size_t left = inlen & 7; for (; in != end; in += 8) { @@ -169,6 +172,7 @@ isc_halfsiphash24(const uint8_t *k, const uint8_t *in, const size_t inlen, uint8_t *out) { REQUIRE(k != NULL); REQUIRE(out != NULL); + REQUIRE(inlen == 0 || in != NULL); uint32_t k0 = U8TO32_LE(k); uint32_t k1 = U8TO32_LE(k + 4); @@ -180,7 +184,9 @@ isc_halfsiphash24(const uint8_t *k, const uint8_t *in, const size_t inlen, uint32_t b = ((uint32_t)inlen) << 24; - const uint8_t *end = in + inlen - (inlen % sizeof(uint32_t)); + const uint8_t *end = (in == NULL) + ? NULL + : in + inlen - (inlen % sizeof(uint32_t)); const int left = inlen & 3; for (; in != end; in += 4) { -- 2.23.0
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.