Magellan Linux

Annotation of /trunk/kernel-magellan/patches-3.9/0109-3.9.10-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2236 - (hide annotations) (download)
Mon Jul 15 09:13:58 2013 UTC (10 years, 10 months ago) by niro
File size: 13530 byte(s)
-linux-3.9.10
1 niro 2236 diff --git a/MAINTAINERS b/MAINTAINERS
2     index 8bdd7a7..2b0fb85 100644
3     --- a/MAINTAINERS
4     +++ b/MAINTAINERS
5     @@ -7512,6 +7512,7 @@ STABLE BRANCH
6     M: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
7     L: stable@vger.kernel.org
8     S: Supported
9     +F: Documentation/stable_kernel_rules.txt
10    
11     STAGING SUBSYSTEM
12     M: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
13     diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
14     index 0af1807..0e2f2a4 100644
15     --- a/arch/x86/kvm/vmx.c
16     +++ b/arch/x86/kvm/vmx.c
17     @@ -3259,15 +3259,22 @@ static void vmx_get_segment(struct kvm_vcpu *vcpu,
18     var->limit = vmx_read_guest_seg_limit(vmx, seg);
19     var->selector = vmx_read_guest_seg_selector(vmx, seg);
20     ar = vmx_read_guest_seg_ar(vmx, seg);
21     + var->unusable = (ar >> 16) & 1;
22     var->type = ar & 15;
23     var->s = (ar >> 4) & 1;
24     var->dpl = (ar >> 5) & 3;
25     - var->present = (ar >> 7) & 1;
26     + /*
27     + * Some userspaces do not preserve unusable property. Since usable
28     + * segment has to be present according to VMX spec we can use present
29     + * property to amend userspace bug by making unusable segment always
30     + * nonpresent. vmx_segment_access_rights() already marks nonpresent
31     + * segment as unusable.
32     + */
33     + var->present = !var->unusable;
34     var->avl = (ar >> 12) & 1;
35     var->l = (ar >> 13) & 1;
36     var->db = (ar >> 14) & 1;
37     var->g = (ar >> 15) & 1;
38     - var->unusable = (ar >> 16) & 1;
39     }
40    
41     static u64 vmx_get_segment_base(struct kvm_vcpu *vcpu, int seg)
42     diff --git a/block/genhd.c b/block/genhd.c
43     index 3c001fb..5098a64 100644
44     --- a/block/genhd.c
45     +++ b/block/genhd.c
46     @@ -512,7 +512,7 @@ static void register_disk(struct gendisk *disk)
47    
48     ddev->parent = disk->driverfs_dev;
49    
50     - dev_set_name(ddev, disk->disk_name);
51     + dev_set_name(ddev, "%s", disk->disk_name);
52    
53     /* delay uevents, until we scanned partition table */
54     dev_set_uevent_suppress(ddev, 1);
55     diff --git a/crypto/algapi.c b/crypto/algapi.c
56     index 6149a6e..7a1ae87 100644
57     --- a/crypto/algapi.c
58     +++ b/crypto/algapi.c
59     @@ -495,7 +495,8 @@ static struct crypto_template *__crypto_lookup_template(const char *name)
60    
61     struct crypto_template *crypto_lookup_template(const char *name)
62     {
63     - return try_then_request_module(__crypto_lookup_template(name), name);
64     + return try_then_request_module(__crypto_lookup_template(name), "%s",
65     + name);
66     }
67     EXPORT_SYMBOL_GPL(crypto_lookup_template);
68    
69     diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c
70     index 7fecc78..5b94137 100644
71     --- a/drivers/block/nbd.c
72     +++ b/drivers/block/nbd.c
73     @@ -714,7 +714,8 @@ static int __nbd_ioctl(struct block_device *bdev, struct nbd_device *nbd,
74     else
75     blk_queue_flush(nbd->disk->queue, 0);
76    
77     - thread = kthread_create(nbd_thread, nbd, nbd->disk->disk_name);
78     + thread = kthread_create(nbd_thread, nbd, "%s",
79     + nbd->disk->disk_name);
80     if (IS_ERR(thread)) {
81     mutex_lock(&nbd->tx_lock);
82     return PTR_ERR(thread);
83     diff --git a/drivers/cdrom/cdrom.c b/drivers/cdrom/cdrom.c
84     index d620b44..8a3aff7 100644
85     --- a/drivers/cdrom/cdrom.c
86     +++ b/drivers/cdrom/cdrom.c
87     @@ -2882,7 +2882,7 @@ static noinline int mmc_ioctl_cdrom_read_data(struct cdrom_device_info *cdi,
88     if (lba < 0)
89     return -EINVAL;
90    
91     - cgc->buffer = kmalloc(blocksize, GFP_KERNEL);
92     + cgc->buffer = kzalloc(blocksize, GFP_KERNEL);
93     if (cgc->buffer == NULL)
94     return -ENOMEM;
95    
96     diff --git a/drivers/power/charger-manager.c b/drivers/power/charger-manager.c
97     index 8acc3f8..d31557f 100644
98     --- a/drivers/power/charger-manager.c
99     +++ b/drivers/power/charger-manager.c
100     @@ -450,7 +450,7 @@ static void uevent_notify(struct charger_manager *cm, const char *event)
101     strncpy(env_str, event, UEVENT_BUF_SIZE);
102     kobject_uevent(&cm->dev->kobj, KOBJ_CHANGE);
103    
104     - dev_info(cm->dev, event);
105     + dev_info(cm->dev, "%s", event);
106     }
107    
108     /**
109     diff --git a/drivers/scsi/osd/osd_uld.c b/drivers/scsi/osd/osd_uld.c
110     index 0fab6b5..9d86947 100644
111     --- a/drivers/scsi/osd/osd_uld.c
112     +++ b/drivers/scsi/osd/osd_uld.c
113     @@ -485,7 +485,7 @@ static int osd_probe(struct device *dev)
114     oud->class_dev.class = &osd_uld_class;
115     oud->class_dev.parent = dev;
116     oud->class_dev.release = __remove;
117     - error = dev_set_name(&oud->class_dev, disk->disk_name);
118     + error = dev_set_name(&oud->class_dev, "%s", disk->disk_name);
119     if (error) {
120     OSD_ERR("dev_set_name failed => %d\n", error);
121     goto err_put_cdev;
122     diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
123     index 82910cc..0f0370f 100644
124     --- a/drivers/scsi/sd.c
125     +++ b/drivers/scsi/sd.c
126     @@ -142,7 +142,7 @@ sd_store_cache_type(struct device *dev, struct device_attribute *attr,
127     char *buffer_data;
128     struct scsi_mode_data data;
129     struct scsi_sense_hdr sshdr;
130     - const char *temp = "temporary ";
131     + static const char temp[] = "temporary ";
132     int len;
133    
134     if (sdp->type != TYPE_DISK)
135     diff --git a/drivers/tty/serial/8250/8250_pci.c b/drivers/tty/serial/8250/8250_pci.c
136     index 26e3a97..c52948b 100644
137     --- a/drivers/tty/serial/8250/8250_pci.c
138     +++ b/drivers/tty/serial/8250/8250_pci.c
139     @@ -4797,10 +4797,6 @@ static struct pci_device_id serial_pci_tbl[] = {
140     PCI_VENDOR_ID_IBM, 0x0299,
141     0, 0, pbn_b0_bt_2_115200 },
142    
143     - { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9835,
144     - 0x1000, 0x0012,
145     - 0, 0, pbn_b0_bt_2_115200 },
146     -
147     { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9901,
148     0xA000, 0x1000,
149     0, 0, pbn_b0_1_115200 },
150     diff --git a/fs/ceph/xattr.c b/fs/ceph/xattr.c
151     index 9b6b2b6..be661d8 100644
152     --- a/fs/ceph/xattr.c
153     +++ b/fs/ceph/xattr.c
154     @@ -675,17 +675,18 @@ ssize_t ceph_getxattr(struct dentry *dentry, const char *name, void *value,
155     if (!ceph_is_valid_xattr(name))
156     return -ENODATA;
157    
158     - spin_lock(&ci->i_ceph_lock);
159     - dout("getxattr %p ver=%lld index_ver=%lld\n", inode,
160     - ci->i_xattrs.version, ci->i_xattrs.index_version);
161    
162     /* let's see if a virtual xattr was requested */
163     vxattr = ceph_match_vxattr(inode, name);
164     if (vxattr && !(vxattr->exists_cb && !vxattr->exists_cb(ci))) {
165     err = vxattr->getxattr_cb(ci, value, size);
166     - goto out;
167     + return err;
168     }
169    
170     + spin_lock(&ci->i_ceph_lock);
171     + dout("getxattr %p ver=%lld index_ver=%lld\n", inode,
172     + ci->i_xattrs.version, ci->i_xattrs.index_version);
173     +
174     if (__ceph_caps_issued_mask(ci, CEPH_CAP_XATTR_SHARED, 1) &&
175     (ci->i_xattrs.index_version >= ci->i_xattrs.version)) {
176     goto get_xattr;
177     diff --git a/fs/hpfs/map.c b/fs/hpfs/map.c
178     index 4acb19d..803d3da 100644
179     --- a/fs/hpfs/map.c
180     +++ b/fs/hpfs/map.c
181     @@ -17,7 +17,8 @@ __le32 *hpfs_map_bitmap(struct super_block *s, unsigned bmp_block,
182     struct quad_buffer_head *qbh, char *id)
183     {
184     secno sec;
185     - if (hpfs_sb(s)->sb_chk) if (bmp_block * 16384 > hpfs_sb(s)->sb_fs_size) {
186     + unsigned n_bands = (hpfs_sb(s)->sb_fs_size + 0x3fff) >> 14;
187     + if (hpfs_sb(s)->sb_chk) if (bmp_block >= n_bands) {
188     hpfs_error(s, "hpfs_map_bitmap called with bad parameter: %08x at %s", bmp_block, id);
189     return NULL;
190     }
191     diff --git a/fs/hpfs/super.c b/fs/hpfs/super.c
192     index a0617e7..962e90c 100644
193     --- a/fs/hpfs/super.c
194     +++ b/fs/hpfs/super.c
195     @@ -558,7 +558,13 @@ static int hpfs_fill_super(struct super_block *s, void *options, int silent)
196     sbi->sb_cp_table = NULL;
197     sbi->sb_c_bitmap = -1;
198     sbi->sb_max_fwd_alloc = 0xffffff;
199     -
200     +
201     + if (sbi->sb_fs_size >= 0x80000000) {
202     + hpfs_error(s, "invalid size in superblock: %08x",
203     + (unsigned)sbi->sb_fs_size);
204     + goto bail4;
205     + }
206     +
207     /* Load bitmap directory */
208     if (!(sbi->sb_bmp_dir = hpfs_load_bitmap_directory(s, le32_to_cpu(superblock->bitmaps))))
209     goto bail4;
210     diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
211     index 6eb0dc5..a49c11b 100644
212     --- a/fs/nfsd/nfs4xdr.c
213     +++ b/fs/nfsd/nfs4xdr.c
214     @@ -162,8 +162,8 @@ static __be32 *read_buf(struct nfsd4_compoundargs *argp, u32 nbytes)
215     */
216     memcpy(p, argp->p, avail);
217     /* step to next page */
218     - argp->p = page_address(argp->pagelist[0]);
219     argp->pagelist++;
220     + argp->p = page_address(argp->pagelist[0]);
221     if (argp->pagelen < PAGE_SIZE) {
222     argp->end = argp->p + (argp->pagelen>>2);
223     argp->pagelen = 0;
224     diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h
225     index df1ff7c..eea4106 100644
226     --- a/include/linux/hugetlb.h
227     +++ b/include/linux/hugetlb.h
228     @@ -354,6 +354,17 @@ static inline int hstate_index(struct hstate *h)
229     return h - hstates;
230     }
231    
232     +pgoff_t __basepage_index(struct page *page);
233     +
234     +/* Return page->index in PAGE_SIZE units */
235     +static inline pgoff_t basepage_index(struct page *page)
236     +{
237     + if (!PageCompound(page))
238     + return page->index;
239     +
240     + return __basepage_index(page);
241     +}
242     +
243     #else /* CONFIG_HUGETLB_PAGE */
244     struct hstate {};
245     #define alloc_huge_page_node(h, nid) NULL
246     @@ -374,6 +385,11 @@ static inline unsigned int pages_per_huge_page(struct hstate *h)
247     }
248     #define hstate_index_to_shift(index) 0
249     #define hstate_index(h) 0
250     +
251     +static inline pgoff_t basepage_index(struct page *page)
252     +{
253     + return page->index;
254     +}
255     #endif /* CONFIG_HUGETLB_PAGE */
256    
257     #endif /* _LINUX_HUGETLB_H */
258     diff --git a/kernel/futex.c b/kernel/futex.c
259     index b26dcfc..49dacfb 100644
260     --- a/kernel/futex.c
261     +++ b/kernel/futex.c
262     @@ -61,6 +61,7 @@
263     #include <linux/nsproxy.h>
264     #include <linux/ptrace.h>
265     #include <linux/sched/rt.h>
266     +#include <linux/hugetlb.h>
267    
268     #include <asm/futex.h>
269    
270     @@ -365,7 +366,7 @@ again:
271     } else {
272     key->both.offset |= FUT_OFF_INODE; /* inode-based key */
273     key->shared.inode = page_head->mapping->host;
274     - key->shared.pgoff = page_head->index;
275     + key->shared.pgoff = basepage_index(page);
276     }
277    
278     get_futex_key_refs(key);
279     diff --git a/kernel/module.c b/kernel/module.c
280     index 97f202c..a55f61b 100644
281     --- a/kernel/module.c
282     +++ b/kernel/module.c
283     @@ -2939,7 +2939,6 @@ static struct module *layout_and_allocate(struct load_info *info, int flags)
284     {
285     /* Module within temporary copy. */
286     struct module *mod;
287     - Elf_Shdr *pcpusec;
288     int err;
289    
290     mod = setup_load_info(info, flags);
291     @@ -2954,17 +2953,10 @@ static struct module *layout_and_allocate(struct load_info *info, int flags)
292     err = module_frob_arch_sections(info->hdr, info->sechdrs,
293     info->secstrings, mod);
294     if (err < 0)
295     - goto out;
296     + return ERR_PTR(err);
297    
298     - pcpusec = &info->sechdrs[info->index.pcpu];
299     - if (pcpusec->sh_size) {
300     - /* We have a special allocation for this section. */
301     - err = percpu_modalloc(mod,
302     - pcpusec->sh_size, pcpusec->sh_addralign);
303     - if (err)
304     - goto out;
305     - pcpusec->sh_flags &= ~(unsigned long)SHF_ALLOC;
306     - }
307     + /* We will do a special allocation for per-cpu sections later. */
308     + info->sechdrs[info->index.pcpu].sh_flags &= ~(unsigned long)SHF_ALLOC;
309    
310     /* Determine total sizes, and put offsets in sh_entsize. For now
311     this is done generically; there doesn't appear to be any
312     @@ -2975,17 +2967,22 @@ static struct module *layout_and_allocate(struct load_info *info, int flags)
313     /* Allocate and move to the final place */
314     err = move_module(mod, info);
315     if (err)
316     - goto free_percpu;
317     + return ERR_PTR(err);
318    
319     /* Module has been copied to its final place now: return it. */
320     mod = (void *)info->sechdrs[info->index.mod].sh_addr;
321     kmemleak_load_module(mod, info);
322     return mod;
323     +}
324    
325     -free_percpu:
326     - percpu_modfree(mod);
327     -out:
328     - return ERR_PTR(err);
329     +static int alloc_module_percpu(struct module *mod, struct load_info *info)
330     +{
331     + Elf_Shdr *pcpusec = &info->sechdrs[info->index.pcpu];
332     + if (!pcpusec->sh_size)
333     + return 0;
334     +
335     + /* We have a special allocation for this section. */
336     + return percpu_modalloc(mod, pcpusec->sh_size, pcpusec->sh_addralign);
337     }
338    
339     /* mod is no longer valid after this! */
340     @@ -3249,6 +3246,11 @@ static int load_module(struct load_info *info, const char __user *uargs,
341     }
342     #endif
343    
344     + /* To avoid stressing percpu allocator, do this once we're unique. */
345     + err = alloc_module_percpu(mod, info);
346     + if (err)
347     + goto unlink_mod;
348     +
349     /* Now module is in final location, initialize linked lists, etc. */
350     err = module_unload_init(mod);
351     if (err)
352     diff --git a/mm/hugetlb.c b/mm/hugetlb.c
353     index ce4cb19..2baa6e3 100644
354     --- a/mm/hugetlb.c
355     +++ b/mm/hugetlb.c
356     @@ -690,6 +690,23 @@ int PageHuge(struct page *page)
357     }
358     EXPORT_SYMBOL_GPL(PageHuge);
359    
360     +pgoff_t __basepage_index(struct page *page)
361     +{
362     + struct page *page_head = compound_head(page);
363     + pgoff_t index = page_index(page_head);
364     + unsigned long compound_idx;
365     +
366     + if (!PageHuge(page_head))
367     + return page_index(page);
368     +
369     + if (compound_order(page_head) >= MAX_ORDER)
370     + compound_idx = page_to_pfn(page) - page_to_pfn(page_head);
371     + else
372     + compound_idx = page - page_head;
373     +
374     + return (index << compound_order(page_head)) + compound_idx;
375     +}
376     +
377     static struct page *alloc_fresh_huge_page_node(struct hstate *h, int nid)
378     {
379     struct page *page;
380     diff --git a/mm/memcontrol.c b/mm/memcontrol.c
381     index f10c112..bd8b380 100644
382     --- a/mm/memcontrol.c
383     +++ b/mm/memcontrol.c
384     @@ -6186,8 +6186,6 @@ mem_cgroup_css_online(struct cgroup *cont)
385     * call __mem_cgroup_free, so return directly
386     */
387     mem_cgroup_put(memcg);
388     - if (parent->use_hierarchy)
389     - mem_cgroup_put(parent);
390     }
391     return error;
392     }
393     diff --git a/net/ceph/auth_none.c b/net/ceph/auth_none.c
394     index 925ca58..8c93fa8 100644
395     --- a/net/ceph/auth_none.c
396     +++ b/net/ceph/auth_none.c
397     @@ -39,6 +39,11 @@ static int should_authenticate(struct ceph_auth_client *ac)
398     return xi->starting;
399     }
400    
401     +static int build_request(struct ceph_auth_client *ac, void *buf, void *end)
402     +{
403     + return 0;
404     +}
405     +
406     /*
407     * the generic auth code decode the global_id, and we carry no actual
408     * authenticate state, so nothing happens here.
409     @@ -106,6 +111,7 @@ static const struct ceph_auth_client_ops ceph_auth_none_ops = {
410     .destroy = destroy,
411     .is_authenticated = is_authenticated,
412     .should_authenticate = should_authenticate,
413     + .build_request = build_request,
414     .handle_reply = handle_reply,
415     .create_authorizer = ceph_auth_none_create_authorizer,
416     .destroy_authorizer = ceph_auth_none_destroy_authorizer,