3027 installgrub can segfault when encountering bogus data on disk

   1 /*
   2  * CDDL HEADER START
   3  *
   4  * The contents of this file are subject to the terms of the
   5  * Common Development and Distribution License (the "License").
   6  * You may not use this file except in compliance with the License.
   7  *
   8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
   9  * or http://www.opensolaris.org/os/licensing.
  10  * See the License for the specific language governing permissions
  11  * and limitations under the License.
  12  *
  13  * When distributing Covered Code, include this CDDL HEADER in each
  14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15  * If applicable, add the following below this CDDL HEADER, with the
  16  * fields enclosed by brackets "[]" replaced with your own identifying
  17  * information: Portions Copyright [yyyy] [name of copyright owner]
  18  *
  19  * CDDL HEADER END
  20  */
  21 /*
  22  * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
  23  */
  24 
  25 #ifndef _INSTALLBOOT_H
  26 #define _INSTALLBOOT_H
  27 
  28 #ifdef  __cplusplus
  29 extern "C" {
  30 #endif
  31 
  32 #include <sys/multiboot.h>
  33 #include <sys/types.h>
  34 
  35 enum ib_fs_types {
  36         TARGET_IS_UFS = 0,
  37         TARGET_IS_HSFS,
  38         TARGET_IS_ZFS
  39 };
  40 
  41 typedef struct _ib_device {
  42         char    *path;
  43         int     fd;
  44         uint8_t type;
  45 } ib_device_t;
  46 
  47 typedef struct _ib_bootblock {
  48         char                    *buf;
  49         char                    *file;
  50         char                    *extra;
  51         multiboot_header_t      *mboot;
  52         uint32_t                mboot_off;
  53         uint32_t                buf_size;
  54         uint32_t                file_size;

  55 } ib_bootblock_t;
  56 
  57 typedef struct _ib_data {
  58         ib_device_t     device;
  59         ib_bootblock_t  bootblock;
  60 } ib_data_t;
  61 
  62 #define is_zfs(type)    (type == TARGET_IS_ZFS)
  63 
  64 #define BBLK_DATA_RSVD_SIZE     (15 * SECTOR_SIZE)
  65 #define BBLK_ZFS_EXTRA_OFF      (SECTOR_SIZE * 1024)
  66 
  67 #ifdef  __cplusplus
  68 }
  69 #endif
  70 
  71 #endif /* _INSTALLBOOT_H */
--- EOF ---