diff --git a/confluent_osdeploy/common/initramfs/opt/confluent/bin/apiclient b/confluent_osdeploy/common/initramfs/opt/confluent/bin/apiclient index 11d3758e..9b853fc7 100644 --- a/confluent_osdeploy/common/initramfs/opt/confluent/bin/apiclient +++ b/confluent_osdeploy/common/initramfs/opt/confluent/bin/apiclient @@ -18,6 +18,9 @@ import time class InvalidApiKey(Exception): pass +def msg_align(len): + return (len + 3) & ~3 + cryptname = ctypes.util.find_library('crypt') if not cryptname: if os.path.exists('/usr/lib64/libcrypt.so.1'): @@ -59,8 +62,8 @@ def get_my_addresses(): break if rtatyp == 1: addrs.append((fam, rta[4:rtalen], plen, ridx)) - rta = rta[rtalen:] - v = v[length:] + rta = rta[msg_align(rtalen):] + v = v[msg_align(length):] return addrs diff --git a/confluent_server/confluent/neighutil.py b/confluent_server/confluent/neighutil.py index 72f1106c..11068378 100644 --- a/confluent_server/confluent/neighutil.py +++ b/confluent_server/confluent/neighutil.py @@ -22,6 +22,11 @@ import eventlet.semaphore as semaphore import eventlet.green.socket as socket import struct + +def msg_align(len): + return (len + 3) & ~3 + + neightable = {} neightime = 0 @@ -65,12 +70,12 @@ def _update_neigh(): curraddr = curraddr[12:] elif rtatyp == 1: # ip address currip = rta[4:rtalen].tobytes() - rta = rta[rtalen:] + rta = rta[msg_align(rtalen):] if not rtalen: break if curraddr and currip: neightable[currip] = curraddr - v = v[length:] + v = v[msg_align(length):] finally: s.close() diff --git a/confluent_server/confluent/netutil.py b/confluent_server/confluent/netutil.py index c2477d79..3339bf21 100644 --- a/confluent_server/confluent/netutil.py +++ b/confluent_server/confluent/netutil.py @@ -25,6 +25,8 @@ import eventlet.support.greendns import os getaddrinfo = eventlet.support.greendns.getaddrinfo +def msg_align(len): + return (len + 3) & ~3 def mask_to_cidr(mask): maskn = socket.inet_pton(socket.AF_INET, mask) @@ -571,7 +573,7 @@ def get_my_addresses(idx=0, family=0, matchlla=None): break if rta[4:rtalen].tobytes() == matchlla: return get_my_addresses(idx=ridx) - rta = rta[rtalen:] + rta = rta[msg_align(rtalen):] elif (ridx == idx or not idx) and scope == 0: rta = v[nlhdrsz+ifaddrsz:length] while len(rta): @@ -580,8 +582,8 @@ def get_my_addresses(idx=0, family=0, matchlla=None): break if rtatyp == 1: addrs.append((fam, rta[4:rtalen].tobytes(), plen, ridx)) - rta = rta[rtalen:] - v = v[length:] + rta = rta[msg_align(rtalen):] + v = v[msg_align(length):] return addrs