Import of kernel-4.18.0-553.66.1.el8_10
This commit is contained in:
parent
98b6a4f588
commit
8e6d029cd2
@ -12,7 +12,7 @@ RHEL_MINOR = 10
|
||||
#
|
||||
# Use this spot to avoid future merge conflicts.
|
||||
# Do not trim this comment.
|
||||
RHEL_RELEASE = 553.64.1
|
||||
RHEL_RELEASE = 553.66.1
|
||||
|
||||
#
|
||||
# ZSTREAM
|
||||
|
@ -801,9 +801,10 @@ __ro_after_init unsigned long poking_addr;
|
||||
|
||||
static void *__text_poke(void *addr, const void *opcode, size_t len)
|
||||
{
|
||||
bool cross_page_boundary = offset_in_page(addr) + len > PAGE_SIZE;
|
||||
struct page *pages[2] = {NULL, NULL};
|
||||
unsigned long flags;
|
||||
char *vaddr;
|
||||
struct page *pages[2];
|
||||
int i;
|
||||
|
||||
/*
|
||||
@ -814,21 +815,28 @@ static void *__text_poke(void *addr, const void *opcode, size_t len)
|
||||
|
||||
if (!core_kernel_text((unsigned long)addr)) {
|
||||
pages[0] = vmalloc_to_page(addr);
|
||||
pages[1] = vmalloc_to_page(addr + PAGE_SIZE);
|
||||
if (cross_page_boundary)
|
||||
pages[1] = vmalloc_to_page(addr + PAGE_SIZE);
|
||||
} else {
|
||||
pages[0] = virt_to_page(addr);
|
||||
WARN_ON(!PageReserved(pages[0]));
|
||||
pages[1] = virt_to_page(addr + PAGE_SIZE);
|
||||
if (cross_page_boundary)
|
||||
pages[1] = virt_to_page(addr + PAGE_SIZE);
|
||||
}
|
||||
BUG_ON(!pages[0]);
|
||||
/*
|
||||
* If something went wrong, crash and burn since recovery paths are not
|
||||
* implemented.
|
||||
*/
|
||||
BUG_ON(!pages[0] || (cross_page_boundary && !pages[1]));
|
||||
|
||||
local_irq_save(flags);
|
||||
set_fixmap(FIX_TEXT_POKE0, page_to_phys(pages[0]));
|
||||
if (pages[1])
|
||||
if (cross_page_boundary)
|
||||
set_fixmap(FIX_TEXT_POKE1, page_to_phys(pages[1]));
|
||||
vaddr = (char *)fix_to_virt(FIX_TEXT_POKE0);
|
||||
memcpy(&vaddr[(unsigned long)addr & ~PAGE_MASK], opcode, len);
|
||||
clear_fixmap(FIX_TEXT_POKE0);
|
||||
if (pages[1])
|
||||
if (cross_page_boundary)
|
||||
clear_fixmap(FIX_TEXT_POKE1);
|
||||
local_flush_tlb();
|
||||
sync_core();
|
||||
|
@ -267,10 +267,6 @@ static int hash_accept(struct socket *sock, struct socket *newsock, int flags,
|
||||
return err;
|
||||
|
||||
err = crypto_ahash_import(&ctx2->req, state);
|
||||
if (err) {
|
||||
sock_orphan(sk2);
|
||||
sock_put(sk2);
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
@ -261,12 +261,14 @@ err_hid_data:
|
||||
*/
|
||||
void ishtp_hid_remove(struct ishtp_cl_data *client_data)
|
||||
{
|
||||
void *data;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < client_data->num_hid_devices; ++i) {
|
||||
if (client_data->hid_sensor_hubs[i]) {
|
||||
kfree(client_data->hid_sensor_hubs[i]->driver_data);
|
||||
data = client_data->hid_sensor_hubs[i]->driver_data;
|
||||
hid_destroy_device(client_data->hid_sensor_hubs[i]);
|
||||
kfree(data);
|
||||
client_data->hid_sensor_hubs[i] = NULL;
|
||||
}
|
||||
}
|
||||
|
@ -824,6 +824,7 @@ static int rtsx_usb_ms_drv_remove(struct platform_device *pdev)
|
||||
|
||||
host->eject = true;
|
||||
cancel_work_sync(&host->handle_req);
|
||||
cancel_delayed_work_sync(&host->poll_card);
|
||||
|
||||
mutex_lock(&host->host_mutex);
|
||||
if (host->req) {
|
||||
|
@ -843,6 +843,8 @@ static void clean_demultiplex_info(struct TCP_Server_Info *server)
|
||||
}
|
||||
|
||||
#ifdef CONFIG_CIFS_DFS_UPCALL
|
||||
/* Release netns reference for this server. */
|
||||
put_net(cifs_net_ns(server));
|
||||
kfree(server->origin_fullpath);
|
||||
kfree(server->leaf_fullpath);
|
||||
#endif
|
||||
@ -1374,8 +1376,6 @@ cifs_put_tcp_session(struct TCP_Server_Info *server, int from_reconnect)
|
||||
/* srv_count can never go negative */
|
||||
WARN_ON(server->srv_count < 0);
|
||||
|
||||
put_net(cifs_net_ns(server));
|
||||
|
||||
list_del_init(&server->tcp_ses_list);
|
||||
spin_unlock(&cifs_tcp_ses_lock);
|
||||
|
||||
@ -2683,11 +2683,11 @@ ip_rfc1001_connect(struct TCP_Server_Info *server)
|
||||
static int
|
||||
generic_ip_connect(struct TCP_Server_Info *server)
|
||||
{
|
||||
int rc = 0;
|
||||
__be16 sport;
|
||||
int slen, sfamily;
|
||||
struct socket *socket = server->ssocket;
|
||||
struct sockaddr *saddr;
|
||||
struct socket *socket;
|
||||
int slen, sfamily;
|
||||
__be16 sport;
|
||||
int rc = 0;
|
||||
|
||||
saddr = (struct sockaddr *) &server->dstaddr;
|
||||
|
||||
@ -2709,18 +2709,27 @@ generic_ip_connect(struct TCP_Server_Info *server)
|
||||
ntohs(sport));
|
||||
}
|
||||
|
||||
if (socket == NULL) {
|
||||
rc = __sock_create(cifs_net_ns(server), sfamily, SOCK_STREAM,
|
||||
IPPROTO_TCP, &socket, 1);
|
||||
if (server->ssocket) {
|
||||
socket = server->ssocket;
|
||||
} else {
|
||||
struct net *net = cifs_net_ns(server);
|
||||
struct sock *sk;
|
||||
|
||||
rc = __sock_create(net, sfamily, SOCK_STREAM,
|
||||
IPPROTO_TCP, &server->ssocket, 1);
|
||||
if (rc < 0) {
|
||||
cifs_server_dbg(VFS, "Error %d creating socket\n", rc);
|
||||
server->ssocket = NULL;
|
||||
return rc;
|
||||
}
|
||||
|
||||
sk = server->ssocket->sk;
|
||||
sk->sk_net_refcnt = 1;
|
||||
get_net(net);
|
||||
this_cpu_add(*net->core.sock_inuse, 1);
|
||||
|
||||
/* BB other socket options to set KEEPALIVE, NODELAY? */
|
||||
cifs_dbg(FYI, "Socket created\n");
|
||||
server->ssocket = socket;
|
||||
socket = server->ssocket;
|
||||
socket->sk->sk_allocation = GFP_NOFS;
|
||||
if (sfamily == AF_INET6)
|
||||
cifs_reclassify_socket6(socket);
|
||||
|
@ -1969,6 +1969,16 @@ int ext4_resize_fs(struct super_block *sb, ext4_fsblk_t n_blocks_count)
|
||||
}
|
||||
brelse(bh);
|
||||
|
||||
/*
|
||||
* For bigalloc, trim the requested size to the nearest cluster
|
||||
* boundary to avoid creating an unusable filesystem. We do this
|
||||
* silently, instead of returning an error, to avoid breaking
|
||||
* callers that blindly resize the filesystem to the full size of
|
||||
* the underlying block device.
|
||||
*/
|
||||
if (ext4_has_feature_bigalloc(sb))
|
||||
n_blocks_count &= ~((1 << EXT4_CLUSTER_BITS(sb)) - 1);
|
||||
|
||||
retry:
|
||||
o_blocks_count = ext4_blocks_count(es);
|
||||
|
||||
|
@ -176,6 +176,11 @@ struct hfsc_sched {
|
||||
|
||||
#define HT_INFINITY 0xffffffffffffffffULL /* infinite time value */
|
||||
|
||||
static bool cl_in_el_or_vttree(struct hfsc_class *cl)
|
||||
{
|
||||
return ((cl->cl_flags & HFSC_FSC) && cl->cl_nactive) ||
|
||||
((cl->cl_flags & HFSC_RSC) && !RB_EMPTY_NODE(&cl->el_node));
|
||||
}
|
||||
|
||||
/*
|
||||
* eligible tree holds backlogged classes being sorted by their eligible times.
|
||||
@ -204,7 +209,10 @@ eltree_insert(struct hfsc_class *cl)
|
||||
static inline void
|
||||
eltree_remove(struct hfsc_class *cl)
|
||||
{
|
||||
rb_erase(&cl->el_node, &cl->sched->eligible);
|
||||
if (!RB_EMPTY_NODE(&cl->el_node)) {
|
||||
rb_erase(&cl->el_node, &cl->sched->eligible);
|
||||
RB_CLEAR_NODE(&cl->el_node);
|
||||
}
|
||||
}
|
||||
|
||||
static inline void
|
||||
@ -1033,6 +1041,8 @@ hfsc_change_class(struct Qdisc *sch, u32 classid, u32 parentid,
|
||||
if (cl == NULL)
|
||||
return -ENOBUFS;
|
||||
|
||||
RB_CLEAR_NODE(&cl->el_node);
|
||||
|
||||
err = tcf_block_get(&cl->block, &cl->filter_list, sch, extack);
|
||||
if (err) {
|
||||
kfree(cl);
|
||||
@ -1217,7 +1227,8 @@ hfsc_qlen_notify(struct Qdisc *sch, unsigned long arg)
|
||||
/* vttree is now handled in update_vf() so that update_vf(cl, 0, 0)
|
||||
* needs to be called explicitly to remove a class from vttree.
|
||||
*/
|
||||
update_vf(cl, 0, 0);
|
||||
if (cl->cl_nactive)
|
||||
update_vf(cl, 0, 0);
|
||||
if (cl->cl_flags & HFSC_RSC)
|
||||
eltree_remove(cl);
|
||||
}
|
||||
@ -1559,7 +1570,10 @@ hfsc_enqueue(struct sk_buff *skb, struct Qdisc *sch, struct sk_buff **to_free)
|
||||
return err;
|
||||
}
|
||||
|
||||
if (first) {
|
||||
sch->qstats.backlog += len;
|
||||
sch->q.qlen++;
|
||||
|
||||
if (first && !cl_in_el_or_vttree(cl)) {
|
||||
if (cl->cl_flags & HFSC_RSC)
|
||||
init_ed(cl, len);
|
||||
if (cl->cl_flags & HFSC_FSC)
|
||||
@ -1574,9 +1588,6 @@ hfsc_enqueue(struct sk_buff *skb, struct Qdisc *sch, struct sk_buff **to_free)
|
||||
|
||||
}
|
||||
|
||||
sch->qstats.backlog += len;
|
||||
sch->q.qlen++;
|
||||
|
||||
return NET_XMIT_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -813,12 +813,20 @@ static int tipc_aead_encrypt(struct tipc_aead *aead, struct sk_buff *skb,
|
||||
goto exit;
|
||||
}
|
||||
|
||||
/* Get net to avoid freed tipc_crypto when delete namespace */
|
||||
if (!maybe_get_net(aead->crypto->net)) {
|
||||
tipc_bearer_put(b);
|
||||
rc = -ENODEV;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
/* Now, do encrypt */
|
||||
rc = crypto_aead_encrypt(req);
|
||||
if (rc == -EINPROGRESS || rc == -EBUSY)
|
||||
return rc;
|
||||
|
||||
tipc_bearer_put(b);
|
||||
put_net(aead->crypto->net);
|
||||
|
||||
exit:
|
||||
kfree(ctx);
|
||||
@ -856,6 +864,7 @@ static void tipc_aead_encrypt_done(struct crypto_async_request *base, int err)
|
||||
kfree(tx_ctx);
|
||||
tipc_bearer_put(b);
|
||||
tipc_aead_put(aead);
|
||||
put_net(net);
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user