[binutils-gdb] nfp: add validity check of island and me

Alan Modra amodra@sourceware.org
Wed Sep 1 01:24:55 GMT 2021


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=90f56146e5748bab6baca97b1470bbd144ae10e8

commit 90f56146e5748bab6baca97b1470bbd144ae10e8
Author: Yinjun Zhang <yinjun.zhang@corigine.com>
Date:   Wed Aug 25 21:01:17 2021 -0400

    nfp: add validity check of island and me
    
    AddressSanitizer detects heap-buffer-overflow when running
    "objdump -D" for nfp .nffw files.
    
            PR 27854
            * nfp-dis.c (_NFP_ISLAND_MAX, _NFP_ME_MAX): Define.
            (nfp_priv_data): ..and use here.
            (_print_instrs): Sanity check island and menum.
    
    Signed-off-by: Yinjun Zhang <yinjun.zhang@corigine.com>
    Signed-off-by: Simon Horman <simon.horman@corigine.com>

Diff:
---
 opcodes/nfp-dis.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/opcodes/nfp-dis.c b/opcodes/nfp-dis.c
index b74ccb3fce5..170f6a2d63e 100644
--- a/opcodes/nfp-dis.c
+++ b/opcodes/nfp-dis.c
@@ -46,6 +46,9 @@
 #define _NFP_ME27_28_CSR_CTX_ENABLES     0x18
 #define _NFP_ME27_28_CSR_MISC_CONTROL    0x160
 
+#define _NFP_ISLAND_MAX 64
+#define _NFP_ME_MAX     12
+
 typedef struct
 {
   unsigned char ctx4_mode:1;
@@ -65,7 +68,7 @@ nfp_opts;
 /* mecfgs[island][menum][is-text] */
 typedef struct
 {
-  nfp_priv_mecfg mecfgs[64][12][2];
+  nfp_priv_mecfg mecfgs[_NFP_ISLAND_MAX][_NFP_ME_MAX][2];
 }
 nfp_priv_data;
 
@@ -2837,6 +2840,12 @@ _print_instrs (bfd_vma addr, struct disassemble_info *dinfo, nfp_opts * opts)
 	  break;
 	}
 
+      if (island >= _NFP_ISLAND_MAX || menum >= _NFP_ME_MAX)
+	{
+	  dinfo->fprintf_func (dinfo->stream, "Invalid island or me.");
+	  return _NFP_ERR_STOP;
+	}
+
       mecfg = &priv->mecfgs[island][menum][is_text];
       num_ctx = (mecfg->ctx4_mode) ? 4 : 8;
       addr_3rdparty32 = mecfg->addr_3rdparty32;


More information about the Binutils-cvs mailing list