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.
|
# Use this spot to avoid future merge conflicts.
|
||||||
# Do not trim this comment.
|
# Do not trim this comment.
|
||||||
RHEL_RELEASE = 553.64.1
|
RHEL_RELEASE = 553.66.1
|
||||||
|
|
||||||
#
|
#
|
||||||
# ZSTREAM
|
# ZSTREAM
|
||||||
|
@ -801,9 +801,10 @@ __ro_after_init unsigned long poking_addr;
|
|||||||
|
|
||||||
static void *__text_poke(void *addr, const void *opcode, size_t len)
|
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;
|
unsigned long flags;
|
||||||
char *vaddr;
|
char *vaddr;
|
||||||
struct page *pages[2];
|
|
||||||
int i;
|
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)) {
|
if (!core_kernel_text((unsigned long)addr)) {
|
||||||
pages[0] = vmalloc_to_page(addr);
|
pages[0] = vmalloc_to_page(addr);
|
||||||
|
if (cross_page_boundary)
|
||||||
pages[1] = vmalloc_to_page(addr + PAGE_SIZE);
|
pages[1] = vmalloc_to_page(addr + PAGE_SIZE);
|
||||||
} else {
|
} else {
|
||||||
pages[0] = virt_to_page(addr);
|
pages[0] = virt_to_page(addr);
|
||||||
WARN_ON(!PageReserved(pages[0]));
|
WARN_ON(!PageReserved(pages[0]));
|
||||||
|
if (cross_page_boundary)
|
||||||
pages[1] = virt_to_page(addr + PAGE_SIZE);
|
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);
|
local_irq_save(flags);
|
||||||
set_fixmap(FIX_TEXT_POKE0, page_to_phys(pages[0]));
|
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]));
|
set_fixmap(FIX_TEXT_POKE1, page_to_phys(pages[1]));
|
||||||
vaddr = (char *)fix_to_virt(FIX_TEXT_POKE0);
|
vaddr = (char *)fix_to_virt(FIX_TEXT_POKE0);
|
||||||
memcpy(&vaddr[(unsigned long)addr & ~PAGE_MASK], opcode, len);
|
memcpy(&vaddr[(unsigned long)addr & ~PAGE_MASK], opcode, len);
|
||||||
clear_fixmap(FIX_TEXT_POKE0);
|
clear_fixmap(FIX_TEXT_POKE0);
|
||||||
if (pages[1])
|
if (cross_page_boundary)
|
||||||
clear_fixmap(FIX_TEXT_POKE1);
|
clear_fixmap(FIX_TEXT_POKE1);
|
||||||
local_flush_tlb();
|
local_flush_tlb();
|
||||||
sync_core();
|
sync_core();
|
||||||
|
@ -267,10 +267,6 @@ static int hash_accept(struct socket *sock, struct socket *newsock, int flags,
|
|||||||
return err;
|
return err;
|
||||||
|
|
||||||
err = crypto_ahash_import(&ctx2->req, state);
|
err = crypto_ahash_import(&ctx2->req, state);
|
||||||
if (err) {
|
|
||||||
sock_orphan(sk2);
|
|
||||||
sock_put(sk2);
|
|
||||||
}
|
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
@ -261,12 +261,14 @@ err_hid_data:
|
|||||||
*/
|
*/
|
||||||
void ishtp_hid_remove(struct ishtp_cl_data *client_data)
|
void ishtp_hid_remove(struct ishtp_cl_data *client_data)
|
||||||
{
|
{
|
||||||
|
void *data;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < client_data->num_hid_devices; ++i) {
|
for (i = 0; i < client_data->num_hid_devices; ++i) {
|
||||||
if (client_data->hid_sensor_hubs[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]);
|
hid_destroy_device(client_data->hid_sensor_hubs[i]);
|
||||||
|
kfree(data);
|
||||||
client_data->hid_sensor_hubs[i] = NULL;
|
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;
|
host->eject = true;
|
||||||
cancel_work_sync(&host->handle_req);
|
cancel_work_sync(&host->handle_req);
|
||||||
|
cancel_delayed_work_sync(&host->poll_card);
|
||||||
|
|
||||||
mutex_lock(&host->host_mutex);
|
mutex_lock(&host->host_mutex);
|
||||||
if (host->req) {
|
if (host->req) {
|
||||||
|
@ -843,6 +843,8 @@ static void clean_demultiplex_info(struct TCP_Server_Info *server)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_CIFS_DFS_UPCALL
|
#ifdef CONFIG_CIFS_DFS_UPCALL
|
||||||
|
/* Release netns reference for this server. */
|
||||||
|
put_net(cifs_net_ns(server));
|
||||||
kfree(server->origin_fullpath);
|
kfree(server->origin_fullpath);
|
||||||
kfree(server->leaf_fullpath);
|
kfree(server->leaf_fullpath);
|
||||||
#endif
|
#endif
|
||||||
@ -1374,8 +1376,6 @@ cifs_put_tcp_session(struct TCP_Server_Info *server, int from_reconnect)
|
|||||||
/* srv_count can never go negative */
|
/* srv_count can never go negative */
|
||||||
WARN_ON(server->srv_count < 0);
|
WARN_ON(server->srv_count < 0);
|
||||||
|
|
||||||
put_net(cifs_net_ns(server));
|
|
||||||
|
|
||||||
list_del_init(&server->tcp_ses_list);
|
list_del_init(&server->tcp_ses_list);
|
||||||
spin_unlock(&cifs_tcp_ses_lock);
|
spin_unlock(&cifs_tcp_ses_lock);
|
||||||
|
|
||||||
@ -2683,11 +2683,11 @@ ip_rfc1001_connect(struct TCP_Server_Info *server)
|
|||||||
static int
|
static int
|
||||||
generic_ip_connect(struct TCP_Server_Info *server)
|
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 sockaddr *saddr;
|
||||||
|
struct socket *socket;
|
||||||
|
int slen, sfamily;
|
||||||
|
__be16 sport;
|
||||||
|
int rc = 0;
|
||||||
|
|
||||||
saddr = (struct sockaddr *) &server->dstaddr;
|
saddr = (struct sockaddr *) &server->dstaddr;
|
||||||
|
|
||||||
@ -2709,18 +2709,27 @@ generic_ip_connect(struct TCP_Server_Info *server)
|
|||||||
ntohs(sport));
|
ntohs(sport));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (socket == NULL) {
|
if (server->ssocket) {
|
||||||
rc = __sock_create(cifs_net_ns(server), sfamily, SOCK_STREAM,
|
socket = server->ssocket;
|
||||||
IPPROTO_TCP, &socket, 1);
|
} 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) {
|
if (rc < 0) {
|
||||||
cifs_server_dbg(VFS, "Error %d creating socket\n", rc);
|
cifs_server_dbg(VFS, "Error %d creating socket\n", rc);
|
||||||
server->ssocket = NULL;
|
|
||||||
return rc;
|
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? */
|
/* BB other socket options to set KEEPALIVE, NODELAY? */
|
||||||
cifs_dbg(FYI, "Socket created\n");
|
cifs_dbg(FYI, "Socket created\n");
|
||||||
server->ssocket = socket;
|
socket = server->ssocket;
|
||||||
socket->sk->sk_allocation = GFP_NOFS;
|
socket->sk->sk_allocation = GFP_NOFS;
|
||||||
if (sfamily == AF_INET6)
|
if (sfamily == AF_INET6)
|
||||||
cifs_reclassify_socket6(socket);
|
cifs_reclassify_socket6(socket);
|
||||||
|
@ -1969,6 +1969,16 @@ int ext4_resize_fs(struct super_block *sb, ext4_fsblk_t n_blocks_count)
|
|||||||
}
|
}
|
||||||
brelse(bh);
|
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:
|
retry:
|
||||||
o_blocks_count = ext4_blocks_count(es);
|
o_blocks_count = ext4_blocks_count(es);
|
||||||
|
|
||||||
|
@ -176,6 +176,11 @@ struct hfsc_sched {
|
|||||||
|
|
||||||
#define HT_INFINITY 0xffffffffffffffffULL /* infinite time value */
|
#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.
|
* eligible tree holds backlogged classes being sorted by their eligible times.
|
||||||
@ -204,7 +209,10 @@ eltree_insert(struct hfsc_class *cl)
|
|||||||
static inline void
|
static inline void
|
||||||
eltree_remove(struct hfsc_class *cl)
|
eltree_remove(struct hfsc_class *cl)
|
||||||
{
|
{
|
||||||
|
if (!RB_EMPTY_NODE(&cl->el_node)) {
|
||||||
rb_erase(&cl->el_node, &cl->sched->eligible);
|
rb_erase(&cl->el_node, &cl->sched->eligible);
|
||||||
|
RB_CLEAR_NODE(&cl->el_node);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
@ -1033,6 +1041,8 @@ hfsc_change_class(struct Qdisc *sch, u32 classid, u32 parentid,
|
|||||||
if (cl == NULL)
|
if (cl == NULL)
|
||||||
return -ENOBUFS;
|
return -ENOBUFS;
|
||||||
|
|
||||||
|
RB_CLEAR_NODE(&cl->el_node);
|
||||||
|
|
||||||
err = tcf_block_get(&cl->block, &cl->filter_list, sch, extack);
|
err = tcf_block_get(&cl->block, &cl->filter_list, sch, extack);
|
||||||
if (err) {
|
if (err) {
|
||||||
kfree(cl);
|
kfree(cl);
|
||||||
@ -1217,6 +1227,7 @@ hfsc_qlen_notify(struct Qdisc *sch, unsigned long arg)
|
|||||||
/* vttree is now handled in update_vf() so that update_vf(cl, 0, 0)
|
/* 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.
|
* needs to be called explicitly to remove a class from vttree.
|
||||||
*/
|
*/
|
||||||
|
if (cl->cl_nactive)
|
||||||
update_vf(cl, 0, 0);
|
update_vf(cl, 0, 0);
|
||||||
if (cl->cl_flags & HFSC_RSC)
|
if (cl->cl_flags & HFSC_RSC)
|
||||||
eltree_remove(cl);
|
eltree_remove(cl);
|
||||||
@ -1559,7 +1570,10 @@ hfsc_enqueue(struct sk_buff *skb, struct Qdisc *sch, struct sk_buff **to_free)
|
|||||||
return err;
|
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)
|
if (cl->cl_flags & HFSC_RSC)
|
||||||
init_ed(cl, len);
|
init_ed(cl, len);
|
||||||
if (cl->cl_flags & HFSC_FSC)
|
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;
|
return NET_XMIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -813,12 +813,20 @@ static int tipc_aead_encrypt(struct tipc_aead *aead, struct sk_buff *skb,
|
|||||||
goto exit;
|
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 */
|
/* Now, do encrypt */
|
||||||
rc = crypto_aead_encrypt(req);
|
rc = crypto_aead_encrypt(req);
|
||||||
if (rc == -EINPROGRESS || rc == -EBUSY)
|
if (rc == -EINPROGRESS || rc == -EBUSY)
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
tipc_bearer_put(b);
|
tipc_bearer_put(b);
|
||||||
|
put_net(aead->crypto->net);
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
kfree(ctx);
|
kfree(ctx);
|
||||||
@ -856,6 +864,7 @@ static void tipc_aead_encrypt_done(struct crypto_async_request *base, int err)
|
|||||||
kfree(tx_ctx);
|
kfree(tx_ctx);
|
||||||
tipc_bearer_put(b);
|
tipc_bearer_put(b);
|
||||||
tipc_aead_put(aead);
|
tipc_aead_put(aead);
|
||||||
|
put_net(net);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user