免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: rtable
打印 上一主题 下一主题

bug in kvm lapic 2.6.30 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2009-07-14 11:39 |只看该作者
patch

  1. static int rmap_write_protect(struct kvm *kvm, u64 gfn)
  2. {
  3.         unsigned long *rmapp;
  4.         u64 *spte;
  5.         int write_protected = 0;

  6.         gfn = unalias_gfn(kvm, gfn);
  7.         rmapp = gfn_to_rmap(kvm, gfn, 0);

  8.         spte = rmap_next(kvm, rmapp, NULL);
  9.         while (spte) {
  10. -                BUG_ON(!spte);
  11.                 BUG_ON(!(*spte & PT_PRESENT_MASK));
  12.                 rmap_printk("rmap_write_protect: spte %p %llx\n", spte, *spte);
  13.                 if (is_writeble_pte(*spte)) {
  14.                         set_shadow_pte(spte, *spte & ~PT_WRITABLE_MASK);
  15.                         write_protected = 1;
  16.                 }
  17.                 spte = rmap_next(kvm, rmapp, spte);
  18.         }
  19.         if (write_protected) {
  20.                 pfn_t pfn;

  21.                 spte = rmap_next(kvm, rmapp, NULL);
  22.                 pfn = spte_to_pfn(*spte);
  23.                 kvm_set_pfn_dirty(pfn);
  24.         }

  25.         /* check for huge page mappings */
  26.         rmapp = gfn_to_rmap(kvm, gfn, 1);
  27.         spte = rmap_next(kvm, rmapp, NULL);
  28.         while (spte) {
  29. -                BUG_ON(!spte);
  30.                 BUG_ON(!(*spte & PT_PRESENT_MASK));
  31.                 BUG_ON((*spte & (PT_PAGE_SIZE_MASK|PT_PRESENT_MASK))
  32.                                          != (PT_PAGE_SIZE_MASK|PT_PRESENT_MASK));
  33.                 pgprintk("rmap_write_protect(large): spte %p %llx %lld\n", spte, *spte, gfn);
  34.                 if (is_writeble_pte(*spte)) {
  35.                         rmap_remove(kvm, spte);
  36.                         --kvm->stat.lpages;
  37.                         set_shadow_pte(spte, shadow_trap_nonpresent_pte);
  38.                         spte = NULL;
  39.                         write_protected = 1;
  40.                 }
  41.                 spte = rmap_next(kvm, rmapp, spte);
  42.         }
  43.         return write_protected;
  44. }

复制代码

论坛徽章:
0
12 [报告]
发表于 2009-07-18 12:48 |只看该作者

  1. void * idr_find(struct idr *idp, int id)
  2. {
  3.         int n;
  4.         struct idr_layer *p;

  5.         p = rcu_dereference(idp->top);
  6.         if (!p)
  7.                 return NULL;

  8.         n = (p->layer +1) * IDR_BITS;
  9. +        BUG_ON(n == 0);

  10.         /* Mask off upper bits we don't use for the search. */
  11.         id &= MAX_ID_MASK;

  12.         if (id >= (1 << n))
  13.                 return NULL;
  14. -        BUG_ON(n == 0);

  15.         while (n > 0 && p) {
  16.                 n -= IDR_BITS;

  17.                 BUG_ON(n != p->layer * IDR_BITS);

  18.                 p = rcu_dereference(p->ary[(id >> n) & IDR_MASK]);
  19.         }
  20.         return((void *)p);
  21. }
  22. EXPORT_SYMBOL(idr_find);

复制代码

[ 本帖最后由 rtable 于 2009-7-21 21:49 编辑 ]

Know-Your-Enemy-Honeynets.rar

58.65 KB, 下载次数: 10

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP