CC: [email protected]
TO: Atish Patra <[email protected]>
CC: Palmer Dabbelt <[email protected]>
CC: Ard Biesheuvel <[email protected]>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git 
master
head:   d5b2251d63b5344ee827d3680fa79bdb9f9ddfa1
commit: 282048ee6534dc5e218f6957eebe6805b2d0c3df [6149/7089] RISC-V: Add EFI 
stub support.
:::::: branch date: 30 hours ago
:::::: commit date: 4 days ago
config: riscv-randconfig-m031-20200911 (attached as .config)
compiler: riscv32-linux-gcc (GCC) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>
Reported-by: Dan Carpenter <[email protected]>

smatch warnings:
drivers/firmware/efi/capsule.c:171 efi_capsule_update_locked() warn: should 
'((((sg_pages[0]) - mem_map) + pfn_base)) << (12)' be a 64 bit type?
drivers/firmware/efi/capsule.c:266 efi_capsule_update() warn: should 
'((((sg_pages[i + 1]) - mem_map) + pfn_base)) << (12)' be a 64 bit type?

# 
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=282048ee6534dc5e218f6957eebe6805b2d0c3df
git remote add linux-next 
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
git fetch --no-tags linux-next master
git checkout 282048ee6534dc5e218f6957eebe6805b2d0c3df
vim +171 drivers/firmware/efi/capsule.c

f0133f3c5b8bb3 Matt Fleming   2016-04-25  125  
f0133f3c5b8bb3 Matt Fleming   2016-04-25  126  /**
f0133f3c5b8bb3 Matt Fleming   2016-04-25  127   * efi_capsule_update_locked - 
pass a single capsule to the firmware
f0133f3c5b8bb3 Matt Fleming   2016-04-25  128   * @capsule: capsule to send to 
the firmware
f0133f3c5b8bb3 Matt Fleming   2016-04-25  129   * @sg_pages: array of scatter 
gather (block descriptor) pages
f0133f3c5b8bb3 Matt Fleming   2016-04-25  130   * @reset: the reset type 
required for @capsule
f0133f3c5b8bb3 Matt Fleming   2016-04-25  131   *
f0133f3c5b8bb3 Matt Fleming   2016-04-25  132   * Since this function must be 
called under capsule_mutex check
f0133f3c5b8bb3 Matt Fleming   2016-04-25  133   * whether efi_reset_type will 
conflict with @reset, and atomically
f0133f3c5b8bb3 Matt Fleming   2016-04-25  134   * set it and capsule_pending if 
a capsule was successfully sent to
f0133f3c5b8bb3 Matt Fleming   2016-04-25  135   * the firmware.
f0133f3c5b8bb3 Matt Fleming   2016-04-25  136   *
f0133f3c5b8bb3 Matt Fleming   2016-04-25  137   * We also check to see if the 
system is about to restart, and if so,
f0133f3c5b8bb3 Matt Fleming   2016-04-25  138   * abort. This avoids races 
between efi_capsule_update() and
f0133f3c5b8bb3 Matt Fleming   2016-04-25  139   * efi_capsule_pending().
f0133f3c5b8bb3 Matt Fleming   2016-04-25  140   */
f0133f3c5b8bb3 Matt Fleming   2016-04-25  141  static int
f0133f3c5b8bb3 Matt Fleming   2016-04-25  142  
efi_capsule_update_locked(efi_capsule_header_t *capsule,
f0133f3c5b8bb3 Matt Fleming   2016-04-25  143                     struct page 
**sg_pages, int reset)
f0133f3c5b8bb3 Matt Fleming   2016-04-25  144  {
f0133f3c5b8bb3 Matt Fleming   2016-04-25  145   efi_physical_addr_t sglist_phys;
f0133f3c5b8bb3 Matt Fleming   2016-04-25  146   efi_status_t status;
f0133f3c5b8bb3 Matt Fleming   2016-04-25  147  
f0133f3c5b8bb3 Matt Fleming   2016-04-25  148   
lockdep_assert_held(&capsule_mutex);
f0133f3c5b8bb3 Matt Fleming   2016-04-25  149  
f0133f3c5b8bb3 Matt Fleming   2016-04-25  150   /*
f0133f3c5b8bb3 Matt Fleming   2016-04-25  151    * If someone has already 
registered a capsule that requires a
f0133f3c5b8bb3 Matt Fleming   2016-04-25  152    * different reset type, we're 
out of luck and must abort.
f0133f3c5b8bb3 Matt Fleming   2016-04-25  153    */
f0133f3c5b8bb3 Matt Fleming   2016-04-25  154   if (efi_reset_type >= 0 && 
efi_reset_type != reset) {
f0133f3c5b8bb3 Matt Fleming   2016-04-25  155           pr_err("Conflicting 
capsule reset type %d (%d).\n",
f0133f3c5b8bb3 Matt Fleming   2016-04-25  156                  reset, 
efi_reset_type);
f0133f3c5b8bb3 Matt Fleming   2016-04-25  157           return -EINVAL;
f0133f3c5b8bb3 Matt Fleming   2016-04-25  158   }
f0133f3c5b8bb3 Matt Fleming   2016-04-25  159  
f0133f3c5b8bb3 Matt Fleming   2016-04-25  160   /*
f0133f3c5b8bb3 Matt Fleming   2016-04-25  161    * If the system is getting 
ready to restart it may have
f0133f3c5b8bb3 Matt Fleming   2016-04-25  162    * called efi_capsule_pending() 
to make decisions (such as
f0133f3c5b8bb3 Matt Fleming   2016-04-25  163    * whether to force an EFI 
reboot), and we're racing against
f0133f3c5b8bb3 Matt Fleming   2016-04-25  164    * that call. Abort in that 
case.
f0133f3c5b8bb3 Matt Fleming   2016-04-25  165    */
62075e581802ea Matt Fleming   2016-05-06  166   if (unlikely(stop_capsules)) {
f0133f3c5b8bb3 Matt Fleming   2016-04-25  167           pr_warn("Capsule update 
raced with reboot, aborting.\n");
f0133f3c5b8bb3 Matt Fleming   2016-04-25  168           return -EINVAL;
f0133f3c5b8bb3 Matt Fleming   2016-04-25  169   }
f0133f3c5b8bb3 Matt Fleming   2016-04-25  170  
f0133f3c5b8bb3 Matt Fleming   2016-04-25 @171   sglist_phys = 
page_to_phys(sg_pages[0]);
f0133f3c5b8bb3 Matt Fleming   2016-04-25  172  
f0133f3c5b8bb3 Matt Fleming   2016-04-25  173   status = 
efi.update_capsule(&capsule, 1, sglist_phys);
f0133f3c5b8bb3 Matt Fleming   2016-04-25  174   if (status == EFI_SUCCESS) {
f0133f3c5b8bb3 Matt Fleming   2016-04-25  175           capsule_pending = true;
f0133f3c5b8bb3 Matt Fleming   2016-04-25  176           efi_reset_type = reset;
f0133f3c5b8bb3 Matt Fleming   2016-04-25  177   }
f0133f3c5b8bb3 Matt Fleming   2016-04-25  178  
f0133f3c5b8bb3 Matt Fleming   2016-04-25  179   return 
efi_status_to_err(status);
f0133f3c5b8bb3 Matt Fleming   2016-04-25  180  }
f0133f3c5b8bb3 Matt Fleming   2016-04-25  181  
f0133f3c5b8bb3 Matt Fleming   2016-04-25  182  /**
f0133f3c5b8bb3 Matt Fleming   2016-04-25  183   * efi_capsule_update - send a 
capsule to the firmware
f0133f3c5b8bb3 Matt Fleming   2016-04-25  184   * @capsule: capsule to send to 
firmware
f0133f3c5b8bb3 Matt Fleming   2016-04-25  185   * @pages: an array of capsule 
data pages
f0133f3c5b8bb3 Matt Fleming   2016-04-25  186   *
f0133f3c5b8bb3 Matt Fleming   2016-04-25  187   * Build a scatter gather list 
with EFI capsule block descriptors to
f0133f3c5b8bb3 Matt Fleming   2016-04-25  188   * map the capsule described by 
@capsule with its data in @pages and
f0133f3c5b8bb3 Matt Fleming   2016-04-25  189   * send it to the firmware via 
the UpdateCapsule() runtime service.
f0133f3c5b8bb3 Matt Fleming   2016-04-25  190   *
6862e6ad95e984 Austin Christ  2016-08-11  191   * @capsule must be a virtual 
mapping of the complete capsule update in the
6862e6ad95e984 Austin Christ  2016-08-11  192   * kernel address space, as the 
capsule can be consumed immediately.
6862e6ad95e984 Austin Christ  2016-08-11  193   * A capsule_header_t that 
describes the entire contents of the capsule
f0133f3c5b8bb3 Matt Fleming   2016-04-25  194   * must be at the start of the 
first data page.
f0133f3c5b8bb3 Matt Fleming   2016-04-25  195   *
f0133f3c5b8bb3 Matt Fleming   2016-04-25  196   * Even though this function 
will validate that the firmware supports
f0133f3c5b8bb3 Matt Fleming   2016-04-25  197   * the capsule guid, users will 
likely want to check that
f0133f3c5b8bb3 Matt Fleming   2016-04-25  198   * efi_capsule_supported() 
returns true before calling this function
f0133f3c5b8bb3 Matt Fleming   2016-04-25  199   * because it makes it easier to 
print helpful error messages.
f0133f3c5b8bb3 Matt Fleming   2016-04-25  200   *
f0133f3c5b8bb3 Matt Fleming   2016-04-25  201   * If the capsule is 
successfully submitted to the firmware, any
f0133f3c5b8bb3 Matt Fleming   2016-04-25  202   * subsequent calls to 
efi_capsule_pending() will return true. @pages
f0133f3c5b8bb3 Matt Fleming   2016-04-25  203   * must not be released or 
modified if this function returns
f0133f3c5b8bb3 Matt Fleming   2016-04-25  204   * successfully.
f0133f3c5b8bb3 Matt Fleming   2016-04-25  205   *
f0133f3c5b8bb3 Matt Fleming   2016-04-25  206   * Callers must be prepared for 
this function to fail, which can
f0133f3c5b8bb3 Matt Fleming   2016-04-25  207   * happen if we raced with 
system reboot or if there is already a
f0133f3c5b8bb3 Matt Fleming   2016-04-25  208   * pending capsule that has a 
reset type that conflicts with the one
f0133f3c5b8bb3 Matt Fleming   2016-04-25  209   * required by @capsule. Do NOT 
use efi_capsule_pending() to detect
f0133f3c5b8bb3 Matt Fleming   2016-04-25  210   * this conflict since that 
would be racy. Instead, submit the capsule
f0133f3c5b8bb3 Matt Fleming   2016-04-25  211   * to efi_capsule_update() and 
check the return value.
f0133f3c5b8bb3 Matt Fleming   2016-04-25  212   *
f0133f3c5b8bb3 Matt Fleming   2016-04-25  213   * Return 0 on success, a 
converted EFI status code on failure.
f0133f3c5b8bb3 Matt Fleming   2016-04-25  214   */
2a457fb31df62c Ard Biesheuvel 2017-06-02  215  int 
efi_capsule_update(efi_capsule_header_t *capsule, phys_addr_t *pages)
f0133f3c5b8bb3 Matt Fleming   2016-04-25  216  {
f0133f3c5b8bb3 Matt Fleming   2016-04-25  217   u32 imagesize = 
capsule->imagesize;
f0133f3c5b8bb3 Matt Fleming   2016-04-25  218   efi_guid_t guid = capsule->guid;
f0133f3c5b8bb3 Matt Fleming   2016-04-25  219   unsigned int count, sg_count;
f0133f3c5b8bb3 Matt Fleming   2016-04-25  220   u32 flags = capsule->flags;
f0133f3c5b8bb3 Matt Fleming   2016-04-25  221   struct page **sg_pages;
f0133f3c5b8bb3 Matt Fleming   2016-04-25  222   int rv, reset_type;
f0133f3c5b8bb3 Matt Fleming   2016-04-25  223   int i, j;
f0133f3c5b8bb3 Matt Fleming   2016-04-25  224  
f0133f3c5b8bb3 Matt Fleming   2016-04-25  225   rv = 
efi_capsule_supported(guid, flags, imagesize, &reset_type);
f0133f3c5b8bb3 Matt Fleming   2016-04-25  226   if (rv)
f0133f3c5b8bb3 Matt Fleming   2016-04-25  227           return rv;
f0133f3c5b8bb3 Matt Fleming   2016-04-25  228  
f0133f3c5b8bb3 Matt Fleming   2016-04-25  229   count = DIV_ROUND_UP(imagesize, 
PAGE_SIZE);
f0133f3c5b8bb3 Matt Fleming   2016-04-25  230   sg_count = sg_pages_num(count);
f0133f3c5b8bb3 Matt Fleming   2016-04-25  231  
6396bb221514d2 Kees Cook      2018-06-12  232   sg_pages = kcalloc(sg_count, 
sizeof(*sg_pages), GFP_KERNEL);
f0133f3c5b8bb3 Matt Fleming   2016-04-25  233   if (!sg_pages)
f0133f3c5b8bb3 Matt Fleming   2016-04-25  234           return -ENOMEM;
f0133f3c5b8bb3 Matt Fleming   2016-04-25  235  
f0133f3c5b8bb3 Matt Fleming   2016-04-25  236   for (i = 0; i < sg_count; i++) {
f0133f3c5b8bb3 Matt Fleming   2016-04-25  237           sg_pages[i] = 
alloc_page(GFP_KERNEL);
f0133f3c5b8bb3 Matt Fleming   2016-04-25  238           if (!sg_pages[i]) {
f0133f3c5b8bb3 Matt Fleming   2016-04-25  239                   rv = -ENOMEM;
f0133f3c5b8bb3 Matt Fleming   2016-04-25  240                   goto out;
f0133f3c5b8bb3 Matt Fleming   2016-04-25  241           }
f0133f3c5b8bb3 Matt Fleming   2016-04-25  242   }
f0133f3c5b8bb3 Matt Fleming   2016-04-25  243  
f0133f3c5b8bb3 Matt Fleming   2016-04-25  244   for (i = 0; i < sg_count; i++) {
f0133f3c5b8bb3 Matt Fleming   2016-04-25  245           
efi_capsule_block_desc_t *sglist;
f0133f3c5b8bb3 Matt Fleming   2016-04-25  246  
f0133f3c5b8bb3 Matt Fleming   2016-04-25  247           sglist = 
kmap(sg_pages[i]);
f0133f3c5b8bb3 Matt Fleming   2016-04-25  248  
f0133f3c5b8bb3 Matt Fleming   2016-04-25  249           for (j = 0; j < 
SGLIST_PER_PAGE && count > 0; j++) {
2a457fb31df62c Ard Biesheuvel 2017-06-02  250                   u64 sz = 
min_t(u64, imagesize,
2a457fb31df62c Ard Biesheuvel 2017-06-02  251                                  
PAGE_SIZE - (u64)*pages % PAGE_SIZE);
f0133f3c5b8bb3 Matt Fleming   2016-04-25  252  
f0133f3c5b8bb3 Matt Fleming   2016-04-25  253                   
sglist[j].length = sz;
2a457fb31df62c Ard Biesheuvel 2017-06-02  254                   sglist[j].data 
= *pages++;
f0133f3c5b8bb3 Matt Fleming   2016-04-25  255  
f0133f3c5b8bb3 Matt Fleming   2016-04-25  256                   imagesize -= sz;
f0133f3c5b8bb3 Matt Fleming   2016-04-25  257                   count--;
f0133f3c5b8bb3 Matt Fleming   2016-04-25  258           }
f0133f3c5b8bb3 Matt Fleming   2016-04-25  259  
f0133f3c5b8bb3 Matt Fleming   2016-04-25  260           /* Continuation pointer 
*/
f0133f3c5b8bb3 Matt Fleming   2016-04-25  261           sglist[j].length = 0;
f0133f3c5b8bb3 Matt Fleming   2016-04-25  262  
f0133f3c5b8bb3 Matt Fleming   2016-04-25  263           if (i + 1 == sg_count)
f0133f3c5b8bb3 Matt Fleming   2016-04-25  264                   sglist[j].data 
= 0;
f0133f3c5b8bb3 Matt Fleming   2016-04-25  265           else
f0133f3c5b8bb3 Matt Fleming   2016-04-25 @266                   sglist[j].data 
= page_to_phys(sg_pages[i + 1]);
f0133f3c5b8bb3 Matt Fleming   2016-04-25  267  
f0133f3c5b8bb3 Matt Fleming   2016-04-25  268           kunmap(sg_pages[i]);
f0133f3c5b8bb3 Matt Fleming   2016-04-25  269   }
f0133f3c5b8bb3 Matt Fleming   2016-04-25  270  
f0133f3c5b8bb3 Matt Fleming   2016-04-25  271   mutex_lock(&capsule_mutex);
f0133f3c5b8bb3 Matt Fleming   2016-04-25  272   rv = 
efi_capsule_update_locked(capsule, sg_pages, reset_type);
f0133f3c5b8bb3 Matt Fleming   2016-04-25  273   mutex_unlock(&capsule_mutex);
f0133f3c5b8bb3 Matt Fleming   2016-04-25  274  
f0133f3c5b8bb3 Matt Fleming   2016-04-25  275  out:
f0133f3c5b8bb3 Matt Fleming   2016-04-25  276   for (i = 0; rv && i < sg_count; 
i++) {
f0133f3c5b8bb3 Matt Fleming   2016-04-25  277           if (sg_pages[i])
f0133f3c5b8bb3 Matt Fleming   2016-04-25  278                   
__free_page(sg_pages[i]);
f0133f3c5b8bb3 Matt Fleming   2016-04-25  279   }
f0133f3c5b8bb3 Matt Fleming   2016-04-25  280  
f0133f3c5b8bb3 Matt Fleming   2016-04-25  281   kfree(sg_pages);
f0133f3c5b8bb3 Matt Fleming   2016-04-25  282   return rv;
f0133f3c5b8bb3 Matt Fleming   2016-04-25  283  }
f0133f3c5b8bb3 Matt Fleming   2016-04-25  284  
EXPORT_SYMBOL_GPL(efi_capsule_update);
62075e581802ea Matt Fleming   2016-05-06  285  

:::::: The code at line 171 was first introduced by commit
:::::: f0133f3c5b8bb34ec4dec50c27e7a655aeee8935 efi: Add 'capsule' update 
support

:::::: TO: Matt Fleming <[email protected]>
:::::: CC: Ingo Molnar <[email protected]>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]

Attachment: .config.gz
Description: application/gzip

_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to