Looks good Acked-by: Jon Derrick On Thu, 2019-02-14 at 01:15 +0100, David Kozub wrote: > From: Jonas Rabenstein > > All add_token_* functions have a common set of conditions that have > to > be checked. Use a common function for those checks in order to avoid > different behaviour as well as code duplication. > > Co-authored-by: David Kozub > Signed-off-by: Jonas Rabenstein < > jonas.rabenstein@studium.uni-erlangen.de> > Signed-off-by: David Kozub > --- > block/sed-opal.c | 25 ++++++++++++++++--------- > 1 file changed, 16 insertions(+), 9 deletions(-) > > diff --git a/block/sed-opal.c b/block/sed-opal.c > index e59ae364f1ef..d285bd4b2b9b 100644 > --- a/block/sed-opal.c > +++ b/block/sed-opal.c > @@ -510,15 +510,24 @@ static int opal_discovery0(struct opal_dev > *dev, void *data) > return opal_discovery0_end(dev); > } > > -static void add_token_u8(int *err, struct opal_dev *cmd, u8 tok) > +static bool can_add(int *err, struct opal_dev *cmd, size_t len) > { > if (*err) > - return; > - if (cmd->pos >= IO_BUFFER_LENGTH - 1) { > - pr_debug("Error adding u8: end of buffer.\n"); > + return false; > + > + if (len > IO_BUFFER_LENGTH || cmd->pos > IO_BUFFER_LENGTH - > len) { > + pr_debug("Error adding %zu bytes: end of buffer.\n", > len); > *err = -ERANGE; > - return; > + return false; > } > + > + return true; > +} > + > +static void add_token_u8(int *err, struct opal_dev *cmd, u8 tok) > +{ > + if (!can_add(err, cmd, 1)) > + return; > cmd->cmd[cmd->pos++] = tok; > } > > @@ -562,9 +571,8 @@ static void add_token_u64(int *err, struct > opal_dev *cmd, u64 number) > msb = fls64(number); > len = DIV_ROUND_UP(msb, 8); > > - if (cmd->pos >= IO_BUFFER_LENGTH - len - 1) { > + if (!can_add(err, cmd, len + 1)) { > pr_debug("Error adding u64: end of buffer.\n"); > - *err = -ERANGE; > return; > } > add_short_atom_header(cmd, false, false, len); > @@ -586,9 +594,8 @@ static void add_token_bytestring(int *err, struct > opal_dev *cmd, > is_short_atom = false; > } > > - if (len >= IO_BUFFER_LENGTH - cmd->pos - header_len) { > + if (!can_add(err, cmd, header_len + len)) { > pr_debug("Error adding bytestring: end of buffer.\n"); > - *err = -ERANGE; > return; > } >