diff options
author | Sebastian Ott <sebott@linux.vnet.ibm.com> | 2016-06-15 14:07:51 +0300 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2016-12-14 18:33:41 +0300 |
commit | 0b7589ecca2b6f962cf3314a3a5a675deeefb624 (patch) | |
tree | 0e76f58c9d6f5ae9cd9d172d3d6f9f11e29f8ba4 /arch/s390/pci | |
parent | d03502684b65492339d70f11aa8ed6df3961a3bf (diff) | |
download | linux-0b7589ecca2b6f962cf3314a3a5a675deeefb624.tar.xz |
s390/pci: query fmb length
Query the length of the fmb and abort fmb registration if the
size of the associated measurement block is too small.
Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'arch/s390/pci')
-rw-r--r-- | arch/s390/pci/pci.c | 2 | ||||
-rw-r--r-- | arch/s390/pci/pci_clp.c | 1 |
2 files changed, 2 insertions, 1 deletions
diff --git a/arch/s390/pci/pci.c b/arch/s390/pci/pci.c index 64e1734bebb7..38e17d4d9884 100644 --- a/arch/s390/pci/pci.c +++ b/arch/s390/pci/pci.c @@ -180,7 +180,7 @@ int zpci_fmb_enable_device(struct zpci_dev *zdev) { struct mod_pci_args args = { 0, 0, 0, 0 }; - if (zdev->fmb) + if (zdev->fmb || sizeof(*zdev->fmb) < zdev->fmb_length) return -EINVAL; zdev->fmb = kmem_cache_zalloc(zdev_fmb_cache, GFP_KERNEL); diff --git a/arch/s390/pci/pci_clp.c b/arch/s390/pci/pci_clp.c index e3ef63b36b5a..1c3332ac1957 100644 --- a/arch/s390/pci/pci_clp.c +++ b/arch/s390/pci/pci_clp.c @@ -148,6 +148,7 @@ static int clp_store_query_pci_fn(struct zpci_dev *zdev, zdev->pft = response->pft; zdev->vfn = response->vfn; zdev->uid = response->uid; + zdev->fmb_length = sizeof(u32) * response->fmb_len; memcpy(zdev->pfip, response->pfip, sizeof(zdev->pfip)); if (response->util_str_avail) { |